【问题标题】:Loop to click on all links with the same CSS_SELECTOR on Python and Selenium循环单击 Python 和 Selenium 上具有相同 CSS_SELECTOR 的所有链接
【发布时间】:2020-09-24 09:15:11
【问题描述】:

我有以下 CSS_SELECTOR,它在我的页面上出现 2 到 20 次,并且每天都在变化:

event = driver.find_elements(By.CSS_SELECTOR, ".sport-tennis .event-list .event-column-main")
random = event[randint(0, len(event)-1)]
random.click()

当点击它时,它会将我带到另一个页面,该页面的 url 每天都在变化,因此它不是固定的 url。现在,正如您所见,我是通过随机单击该 css_selector 来做到这一点的,但我的问题是:有没有一种方法可以创建一个循环,在不重复的情况下单击所有上述 css_selector?

编辑: 试过了,但只点击了带有该 css_selector 的第一个链接并打开了页面,但是当返回主页时没有点击第二个链接,只是以退出代码 0 结束:

events = driver.find_elements(By.CSS_SELECTOR, ".sport-tennis .event-list .event-column-main")

for event in events:
    event.click()
    time.sleep(1)
    driver.find_element(By.CSS_SELECTOR, ".sport-tennis .flex-column .text-truncate").click()
    time.sleep(1)

【问题讨论】:

  • 为了解决这个问题,我们通常会得到需要循环的总次数。在枚举循环中我们获取元素并点击元素[i]的索引。

标签: python selenium loops for-loop css-selectors


【解决方案1】:

我怀疑元素状态可能在每次迭代中都发生了变化,所以试试这个,

for i in range(len(events)):
    events = driver.find_elements(By.CSS_SELECTOR, ".sport-tennis .event-list .event-column-main")
    event[i].click()
    time.sleep(1)
    driver.find_element(By.CSS_SELECTOR, ".sport-tennis .flex-column .text-truncate").click()
    time.sleep(1)

【讨论】:

    【解决方案2】:

    让我们调用你的列表事件而不是事件,事件变量稍后会使用它,所以你的代码可以

    events = driver.find_elements(By.CSS_SELECTOR, ".sport-tennis .event-list .event-column-main")
    for event in events:
        event.click();
    

    【讨论】:

    • 感谢您的帮助,但奇怪的是,它单击了该 css_selector 的第一个链接并打开了新页面,但是当它返回时,上一页没有单击该 css_selector 的第二个链接,而是以退出代码 0 结束。
    • 哦,我来更新一下代码,你能贴一下页面网址吗?
    • 不幸的是它不在线,所以你将无法打开它,但我可以给你类似的页面:bet365.com/#/IP/B13 和我的类似 css_selector .ovm-Fixture_Container .ovm-FixtureDetailsWithIndicators
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多