【问题标题】:Selenium: How to click on all DIVs with same class nameSelenium:如何单击具有相同类名的所有 DIV
【发布时间】:2016-06-13 01:11:41
【问题描述】:

我一直致力于抓取一个通常有 10 到 12 个具有相同类名的 DIV 的网站。当单击这些 DIV 中的任何一个时,它会转到一个新页面。我想从该页面抓取数据,然后导航回上一页,然后单击下一个 div,依此类推。

但我不知道当我回到上一页时,我如何点击下一个 div?

任何帮助将不胜感激。

matches = browser.find_elements_by_class_name('ipo-CompetitionBase ')
index = 0
while index <= len(matches):
    matches[index].click()
    browser.back()
    index += 1

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    问题在于,您不能简单地找到所有divs 并逐个单击它们,因为当您返回上一页时,您之前找到的元素已经“过时”了,您需要“重新找到”他们。

    我会维护我正在点击的当前div 元素的索引,并且每次我返回主页时,我都会点击div 元素索引 + 1 个位置。继续这样做,直到您用尽了主页上的所有 div 元素。

    更像是一个伪代码:

    index = 0
    while True:
       divs = browser.find_elements_by_class_name('className')
    
       try: 
           divs[index].click()
       except IndexError:
           break  # no more elements, exit the loop
    
       # do smth
       # ...
    
       browser.back()
    
       index += 1
    

    【讨论】:

    • 究竟如何循环遍历所有 DIV? -->browser.find_elements_by_class_name('className') find_elements_by_class_name 以数组的形式返回它找到的所有DIV。但问题是,当我从刚刚抓取的页面返回时,如何才能进入下一个 DIV。循环似乎不太适合我。
    • @abhanan93 好的,更新了示例代码。希望你能明白。
    • 感谢您的努力,@alecxa。但不幸的是,当我在刮掉第一个 div 后回到前面时,遇到了这个错误。 StaleElementReferenceException:消息:元素不再附加到 DOM
    • @abhanan93 如果你遵循这个想法,那是不应该发生的。我认为您仍在重复使用循环中先前找到的元素。请显示您当前的代码。
    • @abhanan93 len(matches) 我认为是什么杀死了它,您可以尝试使用while True 并尝试/除了我发布的内容吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2020-06-19
    • 2017-03-22
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多