python - 在新选项卡中打开链接,而不是单击类名找到的元素| Python
问题描述
这是链接
https://www.unibet.eu/betting/sports/filter/football/matches
使用 selenium 驱动程序,我访问此链接。这就是我们在页面上的内容
我的实际任务是单击每个匹配链接。我找到了所有这些匹配项
elems = driver.find_elements_by_class_name('eb700')
当我这样做时
for elem in elems:
elements
elem.click()
time.sleep(2)
driver.execute_script("window.history.go(-1)")
time.sleep(2)
第一次点击,加载新页面,转到上一页,然后出现以下错误
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
我也尝试从 elem 获取 HREF 属性,但它给出了 None,是否可以在新选项卡中打开页面而不是单击 elem?
解决方案
由于您移动到下一页,因此元素不再存在于 DOM 中。因此,您将获得 Stale Element 异常。您可以做的是在返回同一页面时,再次获取所有链接(elems)并使用 while 循环而不是 for 循环。
elems = driver.find_elements_by_class_name('eb700')
i=0
while i<len(elems):
elems[i].click()
time.sleep(2)
driver.execute_script("window.history.go(-1)")
time.sleep(2)
elems = driver.find_elements_by_class_name('eb700')
i++
其他解决方案是保持在同一页面上并将所有 href 属性保存在列表中,然后使用 driver.navigate 打开每个匹配链接。
matchLinks=[]
elems = driver.find_elements_by_class_name('eb700')
for elem in elems:
matchLinks.append(elem.get_attribute('href')
for match in matchLinks:
driver.get(match)
#do whatever you want to do on match page.
推荐阅读
- wso2 - WSO2IS 5.10.0 - 通过 deployment.toml 文件更新配置的问题
- visual-studio-code - JetBrains 在 VSCode 中的“部署”等价物?
- php - 强制从 http 重定向到 https laravel 5.4 heroku
- powershell - AWS PowerShell 尝试使用通过 $File 数组的 Substring() 时出错
- reactjs - React WebStorm DevTools 就像在 Codesandbox 中一样?
- javascript - 保存游戏(使用localStorage)并在重新加载页面后继续游戏的能力
- azure - Azure 函数命名标准
- reactjs - 在初始渲染上使用 useState 跳过 React Query 的 useQuery 钩子
- sql - 如何在 IN 运算符 () 中使用返回 nvarchar 的函数
- angular - 使用共享组件时的 ExpressionChangedAfterItHasBeenCheckedError