精华内容
下载资源
问答
  • ChromeDriver PageLoadStrategy 使用配置

    千次阅读 2019-08-21 14:35:03
    问题引出: 目标网站应用数据分析工具【百度、数据联盟】等外部分析网站,加载页面起来懂不懂几十秒。而ChromeDriver默认是必须等所有的资源加载...其中PageLoadStrategy有三种选择: (1) NONE: 当html下载完成之...

    问题引出:

    目标网站应用数据分析工具【百度、数据联盟】等外部分析网站,加载页面起来懂不懂几十秒。而ChromeDriver默认是必须等所有的资源加载完,才进我们的页面分析处理过程中来。这一切非常恼火

    技术点:selenium ChromeDriver PageLoadStrategy  Chrome

    其中PageLoadStrategy有三种选择:

    (1) NONE: 当html下载完成之后,不等待解析完成,selenium会直接返回

    (2) EAGER: 要等待整个dom树加载完成,即DOMContentLoaded这个事件完成,仅对html的内容进行下载解析

    (3) NORMAL: 即正常情况下,selenium会等待整个界面加载完成(指对html和子资源的下载与解析,如JS文件,图片等,不包括ajax)

    1、解决办法遇败

    网上充斥着:PageLoadStrategy  = eager 能解决问题,嗯是的,不过Chrome不支持这个属性,只支持none

    //老方法 适用于老版本Selenium
    DesiredCapabilities caps = DesiredCapabilities.chrome();
    caps.setCapability("pageLoadStrategy", "eager");

      两种实现方式都试一把,结果就是,不管怎么样 Chrome就是用了这个eager属性,一执行就报:

      org.openqa.selenium.WebDriverException: unknown error: cannot parse capability: pageLoadStrategy

    #新方法 适用于新版本Selenium
    ChromeOptions options = new ChromeOptions();
    opt.setPageLoadStrategy( PageLoadStrategy.EAGER );

    2、柳暗花明-终极解决办法

    DesiredCapabilities caps = DesiredCapabilities.chrome();
    caps.setCapability("pageLoadStrategy", "none");
    WebDriver mDriver = new ChromeDriver( caps );
    
    
    driver.navigate().to("https://www.douban.com/");
    //因为前文设置了 pageLoadStrategy=none 
    //html获取到后就直接开始分析页面信息--可能domcument还未加载完成
    //所以需要等待某元素加载才开始,超时时间为10S
    WebDriverWait wait=new WebDriverWait(driver,10);
    wait.until(ExpectedConditions.presenceOfElementLocated( By.xpath("/html") ));
    
    //上面这一段代码就解决了URL一直加载的问题
    
    
    //我使用的Webmagic java实现
    WebElement webElement = webDriver.findElement(By.xpath("/html"));
    if( webElement != null ){
    	logger.info( "获取整个页面信息失败,但是业务流程不受影响........" );
    	String content = webElement.getAttribute("outerHTML");
    	page.setRawText(content);
    	page.setHtml(new Html(content, request.getUrl()));
    	page.setUrl(new PlainText(request.getUrl()));
    	page.setRequest(request);
    	webDriverPool.returnToPool(webDriver);			    
    }

    3、参考信息

    Selenium 的页面加载以及几种等待的问题

    Page load strategy for Chrome driver

    Does chrome chrome driver support PageLoadStrategy='eager' for Selenium?

    Selenium2(WebDriver)总结(一)---启动浏览器、设置profile&加载插件

    Selenium 的页面加载以及几种等待的问题

    Chrome驱动程序的页面加载策略(更新至Selenium v​​3.12.0)

    Page load strategy for Chrome driver (Updated till Selenium v3.12.0)

    selenium-chrome-driver

    guava

    部分资料可能需要翻-墙出去才能.

    展开全文
  • Web页面属性document.readyState描述当前页面的加载状态,该属性有三个值:loading(正在加载)、...在单页应用程序中(例如Angular、React、Ember),一旦动态内容加载完毕(即pageLoadStrategy状态为COMPLET

    Web页面属性document.readyState描述当前页面的加载状态,该属性有三个值:loading(正在加载)、interactive(可交互)、complete(完成)。
    默认情况下,在document.readyStateCOMPLETE之前,WebDriver都将延迟driver.get()的响应或 driver.navigate().to()的调用。

    在单页应用程序中(例如Angular、React、Ember),一旦动态内容加载完毕(即pageLoadStrategy状态为COMPLETE) 则点击链接或在页面内执行某些操作的行为将不会向服务器发出新请求, 因为内容在客户端动态加载, 无需刷新页面。单页应用程序可以动态加载许多视图, 而无需任何服务器请求,因此页面加载策略将始终显示为COMPLETE的状态, 直到我们执行新的 driver.get()driver.navigate().to()为止。

    WebDriver支持的三种页面加载策略

    WebDriver支持的三种页面加载策略,即pageLoadStrategy有三种取值:

    • normal:等待整个页面的加载,Selenium WebDriver保持等待,直到返回load事件。默认情况下,如果未设置页面加载策略,则设置 normal为初始策略。
    • eagerSelenium WebDriver保持等待,直到完全加载并解析了HTML文档,该策略无关样式表、图片和subframes的加载。设置为 eager时,Selenium WebDriver保持等待, 直至返回DOMContentLoaded事件。
    • noneSelenium WebDriver仅等待至初始页面下载完成。

    默认情况下,当Selenium WebDriver加载页面时,遵循normal的页面加载策略。始终建议您在页面加载缓慢时,停止下载其他资源 (例如图片、css、 js) 。

    页面加载策略设置方法

    pageLoadStrategy是一项标准Capabilities。因此,可以通过desiredCapabilities或者Options设置。

    from selenium import webdriver
    
    options = webdriver.FirefoxOptions()
    webdriver.DesiredCapabilities.FIREFOX['pageLoadStrategy'] = 'normal'
    driver = webdriver.Firefox()
    
    driver.get("http://www.baidu.com")
    print(driver.capabilities)
    driver.quit()
    
    from selenium import webdriver
    from selenium.webdriver import FirefoxOptions
    
    options = FirefoxOptions()
    options.set_capability('pageLoadStrategy', 'normal')
    driver = webdriver.Firefox(options=options)
    
    driver.get("http://www.baidu.com")
    print(driver.capabilities)
    driver.quit()
    
    展开全文
  • true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=59.0.3071.115, platform=LINUX, browserConnectionEnabled=false, ...
  • goog:chromeOptions: {debuggerAddress: localhost:33967}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), ...
  • Selenium WebDriver加载页面时,它遵循正常的pageLoadStrategy。默认情况下页面加载会花费大量时间下载资源(例如图像,css,js)。有些时候我们不需要下载css、图像等,所以WebDriver推荐设置pageLoadStrategy来...

     

    Page loading strategy :页面加载策略


     

    Selenium WebDriver加载页面时,它遵循正常的pageLoadStrategy。默认情况下页面加载会花费大量时间下载资源(例如图像,css,js)。有些时候我们不需要下载css、图像等,所以WebDriver推荐设置pageLoadStrategy来优化。

     

    首先第一种设置页面加载方法:

    • 需要引入指定包:
    
    from selenium.webdriver.chrome.options import Options
    
    

    WebDriver pageLoadStrategy支持以下值:

    • normal:WebDriver会等待整个界面加载完成(如图像,css,js,但不包括ajax
    • eager:等待整个dom树加载完成,即DOMContentLoaded这个事件完成,仅对html的内容进行下载解析
    • none:html下载完成,不等待解析完成即返回
    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    
    options = Options()
    options.page_load_strategy = 'normal'
    driver = webdriver.Chrome(options=options)
    start_time = time.time()
    driver.get('https://www.baidu.com/')
    end_time = time.time() - start_time
    print(end_time)
    driver.quit()
    
    

    加了一个时间打印,对比下时间大小:

    options.page_load_strategy = 'normal' :

    
    F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
    0.9343156814575195
    
    Process finished with exit code 0
    
    

    options.page_load_strategy = 'eager' :

    
    F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
    0.8259425163269043
    
    Process finished with exit code 0
    
    

    options.page_load_strategy = 'none' :

    F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
    0.8259420394897461
    
    Process finished with exit code 0
    
    

     

    其次第二种设置页面加载方法:

    • 需要引入指定包:
    
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    

    示例代码:

    import time
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    
    options = Options()
    desired_capabilities = DesiredCapabilities.CHROME
    desired_capabilities['pageLoadStrategy'] = 'normal'
    driver = webdriver.Chrome()
    start_time = time.time()
    driver.get('https://www.baidu.com/')
    end_time = time.time() - start_time
    print(end_time)
    driver.quit()
    
    

    desired_capabilities['pageLoadStrategy'] = 'normal':

    
    F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
    0.7478384971618652
    
    Process finished with exit code 0
    
    

    desired_capabilities['pageLoadStrategy'] = 'eager':

    
    F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
    0.7273373603820801
    
    Process finished with exit code 0
    
    

    desired_capabilities['pageLoadStrategy'] = 'none':

    
    F:\virtualEnvironment\venv\Scripts\python.exe F:/git/AuomationTest/AuomationTestProject/webTestAuomation/element_localization.py
    0.0019528865814208984
    
    Process finished with exit code 0
    
    

     

    最后两种页面加载方法总结:

    两种方法对比下,明显的是第二种的页面加载速速会更快... 当然官网推荐的是第一种方法,但是在代码调试时,发现第一种方法的运行其实是基于第二种方法之上运行的。所以第二种方法快是必然的 。

     

    以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!


    未完,待续…
    一直都在努力,希望您也是!

     

    更多内容欢迎关注公众号

     

    展开全文
  • from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities ...desired_capabilities['pageLoadStrategy'] = 'none' driver = webdriver.Chrome(desi
    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    import time
     
    desired_capabilities = DesiredCapabilities().CHROME
    desired_capabilities['pageLoadStrategy'] = 'none'
    driver = webdriver.Chrome(desired_capabilities=desired_capabilities)
    driver.get('http://www.baidu.com')
    # 一秒后不再加载
    time.sleep(1)
    
    展开全文
  • from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities ...desired_capabilities[“pageLoadStrategy”] = “none” driver = webdriver.Chrome
  • python 调用selenium的webdriver时,对Chrome浏览器加速 # 加上这段代码,设置对加载页面过程设置 from selenium.webdriver.common.desired_...desired_capabilities["pageLoadStrategy"] = "none" 代码中的pageLoa
  • Enable page load strategy

    2020-12-09 12:25:03
    <div><p>Despite fixes to appium-base-driver to pass along the <code>pageLoadStrategy</code> capability, it was ignored by appium-android-driver. This PR fixes that. A unit test is included.</p><p>该...
  • 可以通过将pageLoadStrategy功能设置为none来实现.然后等待元素出现并调用window.stop来停止加载: from selenium import webdriver from selenium.webdriver.common.desired_capabilities import ...
  • Selenium 页面加载慢(一直转圈)

    千次阅读 2019-11-25 14:19:48
    def setUp(self): # 修改页面加载策略 desired_capabilities = DesiredCapabilities.CHROME # 注释这两行会导致最后输出结果的延迟,即等待... desired_capabilities["pageLoadStrategy"] = "none" pass ...
  • ChromeWebDriver 完整爬到页面的逻辑内容 /*配置基础选项*/ ChromeOptions ... options.setPageLoadStrategy(PageLoadStrategy.EAGER); /*设置无头模式*/ options.addArguments("-headless"); /*创建驱动*
  • selenium driver.get超时

    2020-08-03 17:45:53
    今天跑爬虫遇到get超时了 p一个有效的解决方案 from selenium import webdriver from selenium.webdriver.common.desired_capabilities import ...desired_capabilities["pageLoadStrategy"] = "none
  • Java+Selenium工具类

    2020-08-10 10:19:11
    import java.util.HashMap; import java.util.Map; import java.util.function.Function; import org.openqa....import org.openqa.selenium.PageLoadStrategy; import org.openqa.selenium.WebDriver; import org
  • 一、页面加载等待 1....查找发现selenium有PageLoadStrategy.None方式可解决这个问题。如下 ChromeOptions options = new ChromeOptions(); options.AddArguments("lang=zh_CN.UTF-8"); opt...
  • 这里写自定义目录标题页面超时问题问题描述PageLoadStrategy策略调整 页面超时问题 问题描述 当调用driver.get(“https://xxxx.xxx.xxx”)来访问某页面时,get方法通常会阻塞浏览器直到页面完全加载后才执行后面的...
  • Selenium 页面加载慢

    2019-09-22 00:41:29
    Selenium 页面加载慢 问题描述: 使用Selenium获取网页,发现webdriver.get方法会阻塞直到网页全部加载完成,官方提供的三种wait方法仅对网页的ajax有比较明显的效果。...pageLoadStrategy设置...
  • 1. PageLoadStrategy : 当调用driver.get("https://xxxx.xxx.xxx")来访问某页面时,get方法通常会阻塞浏览器直到页面完全加载后才执行后面的动作,若一个页面加载过慢,则会导致get方法一直阻塞。有时候希望页面...
  • 30000.0}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0.0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=53.0, platformVersion=4.9....
  • goog:chromeOptions: {debuggerAddress: localhost:52747}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), ...
  • handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy:...
  • true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=56.0.2924.87, pl atform=XP, browserConnectionEnabled=false, ...
  • true, pageLoadStrategy=normal, unhandledPromptBehavior=, databaseEnabled=false, handlesAlerts=true, version=61.0.3163.100, browserConnectionEnabled=false, nativeEvents=true...
  • userDataDir=C:\Users\ZHANGQ~1\AppData\Local\Temp\scoped_dir3148_31908}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=60.0....
  • options.PageLoadStrategy = OpenQA.Selenium.PageLoadStrategy.Eager; //设置浏览器路径 options.BrowserExecutableLocation = @"browser\firefox.exe"; //关闭每次调试时打开的CMD service....

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 193
精华内容 77
关键字:

pageloadstrategy