python利用selenium获取网页head中的title

工作中有批量获取网页head中title的应用场景,实践中遇到了一些问题,以此记录一下。

  1. 通过检查发现网页的head中的title确实有文本,但是使用selenium的driver.title提取到了空字符串’’

  2. 接着使用driver.find_element(By.XPATH, ‘/html/head/title’).is_displayed(),得到False,说明title被隐藏了

  3. 进一步检查一下head,使用

    js = "document.head"
    print(driver.execute_script(js))# 得到None
    
    js = "document.title"
    print(driver.execute_script(js))# 同样是None
    

    说明head整个给隐藏了?

  4. 开始百度谷歌,尝试使用了css选择器,XPATH定位等,尝试了bs4解析网页,添加js 语句去使head displayed设置维True等等,都失败了,得到同样结果。

解决方法

最终找到了一个方法解决了问题。
代码如下,利用XPATH先定位元素,然后get_attribute(“textContent”)可以获得到隐藏的元素,前面的定位器应该也可以改成自己所需要的其他定位。

driver.find_element(By.XPATH, '/html/head/title').get_attribute("textContent")

完整代码如下

# 返回网站名称列表,数据来源列表
def get_site_name(urls,site_names):
    options = webdriver.ChromeOptions()
    options.page_load_strategy = 'none' # 我只要部分html元素,所以选择不渲染全部html内容
    driver = webdriver.Chrome('C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe', options=options) # 自己的路径
    driver.maximize_window() # 最大化窗口 
    
    # wait = WebDriverWait(driver, 5)
    names = []
    state = []
    for i in tqdm(range(len(urls))):
        url = urls[i]
        try:
            driver.get(url)
            # wait.until(driver.find_element(By.XPATH, '/html/head/title'))
            time.sleep(1) # 一定要sleep 1s,不然会找不到元素,也就是要等待网页打开才行
            title = driver.find_element(By.XPATH, '/html/head/title').get_attribute("textContent")
            names.append(title)
            state.append(1) # 代表获取成功
        except:
            names.append(site_names[i])
            state.append(0) # 代表获取失败
        
    return pd.DataFrame({'url':urls,'site_name':site_names,'title':names,'state':state})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值