笔记-selenium+chrome headless
笔记-selenium+chrome headless
1. selenium+chrome headless
phantomjs与selenium分手了,建议使用其它无头浏览器。
chrome也提供了无头浏览器,找到对应版本搭建测试环境。
1.1. 常规使用
先上代码,下面是常用调用方式。
from selenium.webdriver.chrome.options import Options
url = 'https://www.guazi.com/bj/buy/'
urls = ['https://www.taobao.com/','https://www.tmall.com/','https://www.csdn.net/']
time1 = time.time()
try:
cookie_t = {}
chrome_option = Options()
chrome_option.add_argument('--headless')
#chrome_option.add_argument('--disable-gpu')
browser = webdriver.Chrome(chrome_options=chrome_option)
browser.get(url)
cookie_t['antipas'] = browser.get_cookie('antipas')['value']
print(cookie_t)
for _ in urls:
browser.get(_)
time.sleep(3)
with open('xxx.txt','a+',encoding='utf-8') as fi:
fi.write(browser.page_source)
browser.close()
except:
print('error')
finally:
browser.quit()
time2 = time.time()
print(time2-time1)
爬虫的代码有一点需要注意,需要操作事件的时候最好不要直接用相应的方法,比如click。最好嵌入js脚本的方式进行调用。因为爬虫的代码执行速度很快,前端元素结构往往反应不过来,从而找出元素不可见或者不存在的错误。
其它常用设置项:
# 设置代理
chromeOptions.add_argument("--proxy-server=http://202.20.16.82:10152")
# 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152
browser = webdriver.Chrome(chrome_options = chromeOptions)
1.2. 更多设置及操作项
1.2.1. 对于浏览器窗口的操作
在浏览器中有些操作是使用系统原生的确认框,这时就无法通过定位元素的方式来操作我们需要的步骤。这种情况就要去操作浏览器的窗口来实现。
1.弹出窗口为Confirm类型
选择确认:
Alert al = driver.switchTo().alert();
al.accept();
选择取消:
Alert al = driver.switchTo().alert();
al.dismiss();
2.弹出窗口为Alert类型
Alert al = driver.switchTo().alert();
al.accept();
3.放大浏览器窗口
driver.manage().window().maximize();
4.关闭浏览器窗口
driver.quit();
driver.close();
5.刷新/前进/后退浏览器
driver.navigate().refresh();
driver.navigate().forward();
driver.navigate().back();
quit和close的区别在于,quit关闭整个浏览器的窗口;close关闭浏览器标签页。
1.2.2. 程序等待方式
在使用selenium的过程中,等待web加载时,通常要等待下一个元素出现再进行操作,这个过程中需要用到等待。selenium中有3种等待:webDriverWait()、implicitly_wait()、sleep().
1)sleep():强制等待,设置固定的休眠时间。任何情况下都等待设置的时间。
//引入前导入相应的包,单位为毫秒;
sleep(5);
2)implicitly_wait():隐式等待,等待一个元素被发现、命令完成,超出了设置的时间则跑出异常;
//设置脚本在查找元素时的最大等待时间
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
3)webDriverWait():显示等待,明确要等待的元素在指定时间之内没找到,那么就抛出Exception.
//设置等待的时长,最长10S
WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='appContentContainer']/div/div/div[1]/div[2]/div/div/button")));
笔记-selenium+chrome headless的更多相关文章
- ubuntu服务器端使用无界面selenium+ chrome + headless
本来想直接用Ubuntu系统里面的firefox来实现selenium自动操作签到的,但是总是出各种问题.没办法,改为Chrome.参考:Ubuntu 线上无界面服务器 使用selenium chro ...
- chrome浏览器爬虫WebDriverException解决采用python + selenium + chrome + headless模式
WebDriverException: Message: unknown error: Chrome failed to start: crashed 第一种:如果出现下面情况: chrome浏览器有 ...
- selenium chrome headless无界面引擎
注意:PhantomJS已被舍弃 chrome headless 在打开浏览器之前添加参数 import time import sys from selenium import webdriver ...
- Ubuntu 无界面使用selenium chrome + headless
1. 安装 selenium : sudo pip install selenium 2. 安装 chromdriver: 进入 淘宝镜像源 下载 chromdriver, 可以查看 notes.tx ...
- Selenium + Chrome headless 报ERROR:gpu_process_transport_factory.cc(1007)] Lost UI shared context 可忽略并配置不输出日志
Selenium不再推荐使用PhantomJS,会报如下警告 UserWarning: Selenium support for PhantomJS has been deprecated, plea ...
- selenium +chrome headless Adhoc模式渲染网页
mannual和adhoc模式比较 Manual vs. Adhoc In the script above, we start the ChromeDriver server process whe ...
- selenium +chrome headless Manual 模式渲染网页
可以看看这个里面的介绍,写得很好.https://duo.com/blog/driving-headless-chrome-with-python from selenium import webdr ...
- ubuntu中如何安装selenium+chrome(headless)无界面浏览器?
selenium是一个Web的自动化测试工具,它可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生.但是它自身不带浏览器,不支持浏览器的功能,因此它 ...
- Selenium及Headless Chrome抓取动态HTML页面
一般的的静态HTML页面可以使用requests等库直接抓取,但还有一部分比较复杂的动态页面,这些页面的DOM是动态生成的,有些还需要用户与其点击互动,这些页面只能使用真实的浏览器引擎动态解析,Sel ...
随机推荐
- 《C#多线程编程实现方式》
一.使用线程的理由 1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使用线程来简化编码. 3.可以使用线程来实现并发执行. 二.基本知识 1.进程与线程:进程作为操作系统执行程序 ...
- 云集微助手安装教程和授权说明old
安装教程 一 .手机越狱(如果已经越狱请跳过此步,直接进行第二步) 越狱教程:http://jailbreak.25pp.com/yueyu/ 二 .安装触动精灵(如果你已安装触动精灵最新版请跳过此步 ...
- 刚刚写的一个lua下解释csv的工具。
csvtool = {} function csvtool:csv2table(filename) if type(filename) ~= "string" or filenam ...
- 从PeopleEditor控件中取出多用户并更新到列表
如果一个列表中有一个字段类型为用户或用户组,并且设置为用户,允许多值的话,那么用代码进行更新的时候就必须将这个字段的值赋成SPFieldUserValueCollection类型,以下代码即为从Peo ...
- 关于Linux主流框架运维工作剖析
LINUX是开源的,这也是最主要的原因,想学Windows,Unix对不起,没有源代码.也正是因为这样,LINUX才能够像雪球一样越滚越大,发展到现在这种规模.今天将为大家带来关于Linux主流框架运 ...
- SQL Server 2008数据备份与还原的原理是什么?
为什么SqlServer有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的SqlServer数据 ...
- May 8th 2017 Week 19th Monday
Art lies in concealing art. 隐而不露即艺术. Sometimes, concealing is much more seductive than totally naked ...
- 2016 Multi-University Training Contest 4 - 1005 (hdu5768)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意:给你区间[L,R],问你[L, R]中有多少个数字x满足x%7=0且x%p[i]≠a[ ...
- java 网络流 TCP/UDP
一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...
- CRUD全栈式编程架构之导入导出的设计
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...