如何在Python中使用Selenium阻止弹出窗口?

0s7z1bwu  于 2023-06-06  发布在  Python
关注(0)|答案(3)|浏览(529)

弹出窗口正在搞乱一个我试图使用selenium/python创建的web scraper。目标是从网页的每个子页面中提取文本。但是,在随机情况下会出现此弹出窗口:

我试图从webdriver的选项中消除弹出窗口,但它不起作用。下面是chrome示例的代码:

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.options import Options
  3. from selenium.webdriver.chrome.service import Service
  4. from webdriver_manager.chrome import ChromeDriverManager
  5. options = Options()
  6. options.add_argument('--headless')
  7. options.add_experimental_option('detach', True)
  8. options.add_argument("--disable-popup-blocking")
  9. driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

有什么建议吗?

xxhby3vn

xxhby3vn1#

如果弹出窗口出现在特定时间点,您可以单击X元素关闭弹出窗口。但是,如果弹出窗口是随机弹出的,则很难使用selenium-webdriver进行处理。
一个更简单和理想的方法是要求开发人员/devops团队在测试环境中禁用弹出窗口,以便进行自动化测试。

nuypyhwy

nuypyhwy2#

  • 这不是一个弹出窗口,它更像是一个“吐司”(这就是为什么选项options.add_argument("--disable-popup-blocking")不起作用)。
  • 您可以关闭它,甚至更好地删除它,但服务器可能会呈现一个新的。
  • 您可以尝试删除元素(发送一些javascript),希望服务器不会呈现新的元素。如果服务器呈现一个新的,您可以尝试再次删除它。
  • 要定位元素,您应该查找上面的几行(父元素)。

尝试使用其中一个:

按Id编写脚本

  1. js = """
  2. element = document.getElementById("your id");
  3. element.remove();
  4. """

按类编写脚本

  1. js = """
  2. element = document.getElementsByClassName("your classes");
  3. element[0].remove()
  4. """

然后执行脚本

执行脚本

  1. driver.execute_script(js)
展开查看全部
csga3l58

csga3l583#

要使用Selenium和Python处理弹出窗口,可以使用WebDriverWait类沿着Selenium提供的预期条件。通过等待弹出窗口出现并处理它,您可以继续执行自动化脚本。

  1. # Wait for the pop-up window to appear
  2. WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
  3. # Switch to the pop-up window
  4. windows = driver.window_handles
  5. driver.switch_to.window(windows[1])
  6. # Close the pop-up window
  7. driver.close()
  8. # Switch back to the main window (if needed)
  9. driver.switch_to.window(windows[0])

相关问题