python - 使用 python selenium 迭代谷歌搜索结果
问题描述
我想迭代点击谷歌搜索结果并复制每个站点的菜单。到目前为止,我正在复制菜单并返回结果页面,但无法迭代单击结果。现在,我想单独学习迭代搜索结果,但我陷入了过时的元素引用异常,我做到了很少看到其他来源,但没有运气。
from selenium import webdriver
chrome_path = r"C:\Users\Downloads\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get('https://www.google.com?q=python#q=python')
weblinks = driver.find_elements_by_xpath("//div[@class='g']//a[not(@class)]");
for links in weblinks[0:9]:
links.get_attribute("href")
print(links.get_attribute("href"))
links.click()
driver.back()
解决方案
StaleElementReferenceException 意味着您所指的元素不再存在。这通常发生在页面自动重绘时。在您的情况下,您更改页面并返回,因此元素将被重绘 100%。
默认解决方案是每次搜索循环内的列表。
如果您想确保列表每次迭代都相同,则需要添加一些额外的检查(比较文本等)
如果您使用此代码进行抓取,则可能不需要返回导航。只需直接打开每个页面driver.get(href)
在这里您可以找到代码示例:如何使用 Selenium WebDriver 在新选项卡 (chrome) 中打开链接?
推荐阅读
- vue.js - 单个文件组件 - 在从导航栏更改值时重新安装组件
- java - 页面完全加载后读取页面源代码(执行 JavaScript)
- html - Different height and position for col in bootstrap
- mongodb - 向文档 mongodb 添加字段以保留以前的数据
- python-requests - 重试请求而不增加延迟但修复一个(例如:每 30 秒)
- c# - 对 ASP.NET Core 中缺少所需属性的响应
- python - 如何用python在函数内部编写while循环?
- sql - System.Data.SqlClient.SqlException:违反主键
- c++ - 在线程中使用 boost stable_timer 和 sleep 有什么区别?
- reactjs - 如何在我的 setState 函数调用中使用变量?