美文网首页
Selenium和PhantomJS

Selenium和PhantomJS

作者: 李霖弢 | 来源:发表于2021-01-29 11:42 被阅读0次

    Selenium是目前使用最广泛的浏览器自动化测试工具,支持不同平台/不同浏览器。可以配合JS测试框架Mocha进行测试。
    Selenium自身不带浏览器,需配合浏览器driver实现功能(如Chrome、PhantomJS)

    • 新版的Selenium已经放弃PhantomJS,会出现has no attribute 'PhantomJS'异常。应安装老版本selenium==2.48.0

    Python

    • pip install selenium
    • 下载对应的driver(如chrome即为chromedriver),将其exe文件复制到以下路径,并将以下路径添加到环境变量Path
      • 对应浏览器的exe文件所在位置,如C:\Users\62406\AppData\Local\Google\Chrome\Application
      • Python所在位置,如C:\Users\62406\AppData\Local\Programs\Python\Python38\Scripts
    from selenium.webdriver import Chrome
    driver = Chrome()
    driver.get("https://selenium.dev")
    cheese = driver.find_element(By.ID, "cheese")
    cheddar = cheese.find_elements_by_id("cheddar")
    cheddar2 = driver.find_element_by_css_selector("#cheese #cheddar")
    mucho_cheese = driver.find_elements_by_css_selector("#cheese li")
    emailAddressField = driver.find_element(with_tag_name("input").above(cheese))
    # above below toLeftOf toRightOf near(距离50px以内)
    

    Node

    详细API和源码

    • npm install selenium-webdriver --save
    • 下载对应的driver(如chrome即为chromedriver),将其exe文件复制到以下路径,并将以下路径添加到环境变量Path
      • 对应浏览器的exe文件所在位置,如C:\Users\62406\AppData\Local\Google\Chrome\Application
    const {Builder, By, Key, until} = require('selenium-webdriver');
    
    (async function example() {
        let driver = await new Builder().forBrowser('chrome').build();
        try {
            await driver.get('https://www.baidu.com');
            await driver.findElement(By.name('q')).sendKeys('cheese', Key.ENTER);
            let firstResult = await driver.wait(until.elementLocated(By.css('h3>div')), 10000);
            console.log(await firstResult.getAttribute('textContent'));
        }
        finally{
            driver.quit();
        }
    })();
    

    Waits

    • Explicit wait
      显示等待,写明一次等待最多要多久
    await driver.wait(until.elementLocated(By.css('p')),10000);
    
    • Implicit wait
      隐式等待,统一配置需要多久
    await driver.manage().setTimeouts( { implicit: 10000 } );
    
    • Fluent wait
      流畅等待,类似Explicit wait,但有更多自定义的空间

    Web Element

    let ele = driver.findElement(By.name('q'));
    let elements = await ele.findElements(By.css('p'));
    for(let e of elements) {
      console.log(await e.getText());
      console.log(await e.getAttribute("title"));
      console.log(await e.isEnabled());
      console.log(await e.isSelected());
      console.log(await e.getTagName());
      console.log(await e.getRect());
      console.log(await e.getCssValue('color'));
    }
    

    其他


    PhantomJS

    PhantomJS是一个基于webkit的无界面浏览器,它会把网站加载到内存并执行页面上的JavaScript,配合Selenium可爬取vue渲染后页面

    相关文章

      网友评论

          本文标题:Selenium和PhantomJS

          本文链接:https://www.haomeiwen.com/subject/aprazktx.html