工作中有批量获取网页head中title的应用场景,实践中遇到了一些问题,以此记录一下。
-
通过检查发现网页的head中的title确实有文本,但是使用selenium的driver.title提取到了空字符串’’
-
接着使用driver.find_element(By.XPATH, ‘/html/head/title’).is_displayed(),得到False,说明title被隐藏了
-
进一步检查一下head,使用
js = "document.head" print(driver.execute_script(js))# 得到None js = "document.title" print(driver.execute_script(js))# 同样是None
说明head整个给隐藏了?
-
开始百度谷歌,尝试使用了css选择器,XPATH定位等,尝试了bs4解析网页,添加js 语句去使head displayed设置维True等等,都失败了,得到同样结果。文章来源:https://www.toymoban.com/news/detail-535950.html
解决方法
最终找到了一个方法解决了问题。
代码如下,利用XPATH先定位元素,然后get_attribute(“textContent”)可以获得到隐藏的元素,前面的定位器应该也可以改成自己所需要的其他定位。文章来源地址https://www.toymoban.com/news/detail-535950.html
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})
到了这里,关于python利用selenium获取网页head中的title的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!