硒与Python使用MacOS上的无头铬 - 花费太长



我有一个脚本,该脚本将登录到一个站点,然后进行屏幕截图。它在无头模式下使用MACOS上的Chrome 59。

我有两个问题,我认为是相关的。一个问题是我的脚本需要几分钟的时间需要几秒钟。第二个是Chrome图标在我的码头中徘徊,永远不会关闭。

我认为这些问题是由我正在检查的网站引起的,其中有几个不加载的要素。 imagesgrey_semi.pnghttps://www.google-analytics.com/analytics.js,我认为这会固定硒,并阻止它按照driver.close()

指示关闭

我该怎么办?

脚本:

import os  
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(executable_path=os.path.abspath("chromedriver"),   chrome_options=chrome_options)
driver.get("https://url.com/")
username = driver.find_element_by_name("L1")
username.clear()
username.send_keys("name")
password = driver.find_element_by_name("P1")
password.clear()
password.send_keys("pass")
driver.find_element_by_id("login").click()
driver.get("https://url.com/Overview.aspx")
driver.get_screenshot_as_file('main-page.png')
driver.close()

我在您的代码中看不到任何等待。如您所知,Web应用程序正在使用AJAX技术来加载动态数据。当浏览器加载页面时,该页面中的元素可能会以不同的时间间隔加载。根据实现的不同,加载事件可能会受到google-analytics.com/analytics.js的影响,因为在所有内容(包括图像,脚本文件,CSS文件等(之后,将网页完全考虑到完全加载。默认情况下,您的UI硒测试使用浏览器的新实例,因此不应缓存analytics.js。还有一件事要检查是将Google Analytics(分析(放置在特定位置,以便在页面加载或运行异步之前才加载它。它曾经是在</body>标签之前,但我相信现在应该是<head>标签中的最后一个<script>。您可以在此处找到有关Google Analytics(分析(页面负载影响的更多详细信息,他们声称如果做得正确,负载时间太小,甚至不值得担心。我最好的猜测是,使用Google Analytics(分析(的问题。

关于您的第二个问题

Chrome图标在我的码头中徘徊,永不关闭

如果您在浏览器控制台中看到错误,请尝试使用quit((方法,它关闭浏览器并关闭启动ChromeDriver时启动的ChromeDriver可执行文件。请记住,close()仅用于关闭浏览器,但驾驶员实例仍然悬挂。要检查的另一件事是,您实际上正在使用ChromeDriver可执行文件和Chrome浏览器的最新版本。

更新:

如果等待不会影响您的执行时间,则意味着Selenium将等待页面完成加载,然后查找您指定的元素。我能想到的唯一真正的选择是指定类似的页面超时:

from selenium.common.exceptions import TimeoutException
try:
    driver.set_page_load_timeout(seconds)
except TimeoutException:
    # put code with waits here

我用以下内容解决了此问题:

driver.find_element_by_link_text("Job Board").click()
driver.find_element_by_link_text("Available Deployments").click()

相关内容

  • 没有找到相关文章

最新更新