首页 > 解决方案 > 在新选项卡中打开链接,而不是单击类名找到的元素| Python

问题描述

这是链接

https://www.unibet.eu/betting/sports/filter/football/matches

使用 selenium 驱动程序,我访问此链接。这就是我们在页面上的内容

Sample_Image

我的实际任务是单击每个匹配链接。我找到了所有这些匹配项

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?

标签: pythonseleniumwebdriverscreen-scraping

解决方案


由于您移动到下一页,因此元素不再存在于 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.

推荐阅读