Selenium和PhantomJS
2021-01-29 本文已影响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
- 对应浏览器的exe文件所在位置,如
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
- npm install selenium-webdriver --save
- 下载对应的driver(如
chrome
即为chromedriver
),将其exe文件复制到以下路径,并将以下路径添加到环境变量Path
- 对应浏览器的exe文件所在位置,如
C:\Users\62406\AppData\Local\Google\Chrome\Application
- 对应浏览器的exe文件所在位置,如
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渲染后页面