【问题标题】:How to use selenium and Python to click 'accept cookies' button in popup, how can I move on when popup has no x如何使用 selenium 和 Python 在弹出窗口中单击“接受 cookie”按钮,当弹出窗口没有 x 时如何继续
【发布时间】:2021-04-11 15:42:44
【问题描述】:

我是使用 selenium 模块的新手。我从一些简单的教程开始,直到我得到一个弹出窗口。

因为弹出窗口没有 x,我无法应用我在网上找到的其他建议。 How to close pop up window in Selenium

但是我尝试检查弹出窗口的代码,我可以看到我可能有几个选项,通过引用链接文本“接受 Cookie”来关闭,或者通过按钮 ID“onetrust-”关闭接受-btn-handler"

这是我目前的代码。

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.reed.co.uk/jobs/senior-insight-analyst/42347955")

driver.implicitly_wait(10)
link = driver.find_element_by_link_text("onetrust-accept-btn-handler")
link.click()

尝试

link = driver.find_element_by_link_text("onetrust-accept-btn-handler")

link = driver.find_element_by_link_text("接受 cookie")

导致错误

NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"link text","selector":"onetrust-accept-btn-handler"}

NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"link text","selector":"Accept cookies"}

我想知道如果按钮 ID 已知,是否有比链接文本更好的命令,或者我是否因为它是一个弹出窗口而错过了流程中的另一个步骤?任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 它不是链接文本,它的按钮标签很明显带有id,所以你为什么不试试driver.find_element_by _xpath("//button[@id='onetrust-accept-btn-handler']")
  • 谢谢开发者。我相信这个建议已经推动了我认为的一步。我现在有一个不同的错误来研究执行此操作。我现在得到 WebDriverException: Message: chrome not reachable。我会尝试研究。

标签: selenium selenium-webdriver selenium-chromedriver popup popupwindow


【解决方案1】:

请使用显式等待,这样您的弹出窗口就会出现,您的 selenium 脚本可以检测到该元素并点击它。

使用下面的代码 -

WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, 'onetrust-accept-btn-handler'))).click()

如果它解决了您的问题,请将其标记为答案。

【讨论】:

    【解决方案2】:

    感谢 Swaroop Humane 和 Dev 的回答。上面的答案有效,我还需要再添加三行导入代码,然后解决方案才能单击弹出窗口中的 Accept cookies 按钮。 https://selenium-python.readthedocs.io/waits.html

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    

    下面的最终代码。

    import selenium
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    PATH = "C:\Program Files (x86)\chromedriver.exe"
    driver = webdriver.Chrome(PATH)
    driver.get("https://www.reed.co.uk/jobs/senior-insight-analyst/42347955")
    
    #driver.implicitly_wait(10)
    #link = driver.find_element_by_link_text("onetrust-accept-btn-handler")
    #link.click()
    
    
    WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, 'onetrust-accept-btn-handler'))).click()
    

    然后就发生了。

    我可能需要想办法在我登录到这个 web 服务时运行 selenium,而不是让它每次都运行一个新的浏览器。有什么想法吗?

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多