如何使Selenium不等到整页加载,脚本速度慢?

bl7*_*l79 14 python selenium google-chrome selenium-chromedriver pageloadstrategy

Selenium driver.get (url)等到整页加载.但是抓取页面试图加载一些死的JS脚本.所以我的Python脚本等待它并且几分钟不起作用.此问题可能出现在网站的每个页面上.

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.cortinadecor.com/productos/17/estores-enrollables-screen/estores-screen-corti-3000')
# It try load: https://www.cetelem.es/eCommerceCalculadora/resources/js/eCalculadoraCetelemCombo.js 
driver.find_element_by_name('ANCHO').send_keys("100")
Run Code Online (Sandbox Code Playgroud)

如何限制等待的时间,阻止文件的AJAX加载,还是以其他方式?

我也在测试我的脚本webdriver.Chrome(),但是会使用PhantomJS(),或者可能是Firefox().因此,如果某些方法使用浏览器设置的更改,那么它必须是通用的.

Deb*_*anB 21

当Selenium默认加载页面/网址时,它遵循pageLoadStrategy设置为的默认配置normal.为了使Selenium不等待整页加载,我们可以配置pageLoadStrategy.pageLoadStrategy支持3个不同的值如下:

  1. normal (整页加载)
  2. eager (互动)
  3. none

以下是配置以下内容的代码块pageLoadStrategy:

  • Firefox:

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().FIREFOX
    caps["pageLoadStrategy"] = "normal"  #  complete
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "none"
    driver = webdriver.Firefox(desired_capabilities=caps, executable_path=r'C:\path\to\geckodriver.exe')
    driver.get("http://google.com")
    
    Run Code Online (Sandbox Code Playgroud)
  • Chrome:

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    caps = DesiredCapabilities().CHROME
    caps["pageLoadStrategy"] = "normal"  #  complete
    #caps["pageLoadStrategy"] = "eager"  #  interactive
    #caps["pageLoadStrategy"] = "none"
    driver = webdriver.Chrome(desired_capabilities=caps, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com")
    
    Run Code Online (Sandbox Code Playgroud)

:pageLoadStrategynormal,eager并且none是按要求webdriver的W3C编辑草稿,但pageLoadStrategy作为价值eager仍然是一个WIP(工作正在进行中)ChromeDriver实施.您可以在Python中的Chromedriver Selenium的"Eager"页面加载策略解决方法中找到详细的讨论

  • 它适用于Firefox().在Chrome()中,"eager"选项会抛出"不支持"错误.运行如下:caps = DesiredCapabilities().CHROME caps ["pageLoadStrategy"] ="none"driver = webdriver.Chrome(desired_capabilities = caps)driver.get('https:// href ...')time.sleep(5 )driver.find_element_by_name('ANCHO').send_keys("100") (2认同)
  • 这在Firefox 57中效果很好。谢谢。 (2认同)

Jur*_*ian 5

基于selenium docs V4.0,现在看起来是这样的:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.page_load_strategy = 'none'
driver = webdriver.Chrome(options=options)
driver.get("http://www.google.com")
driver.quit()
Run Code Online (Sandbox Code Playgroud)