笔记-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的更多相关文章

  1. ubuntu服务器端使用无界面selenium+ chrome + headless

    本来想直接用Ubuntu系统里面的firefox来实现selenium自动操作签到的,但是总是出各种问题.没办法,改为Chrome.参考:Ubuntu 线上无界面服务器 使用selenium chro ...

  2. chrome浏览器爬虫WebDriverException解决采用python + selenium + chrome + headless模式

    WebDriverException: Message: unknown error: Chrome failed to start: crashed 第一种:如果出现下面情况: chrome浏览器有 ...

  3. selenium chrome headless无界面引擎

    注意:PhantomJS已被舍弃 chrome headless 在打开浏览器之前添加参数 import time import sys from selenium import webdriver ...

  4. Ubuntu 无界面使用selenium chrome + headless

    1. 安装 selenium : sudo pip install selenium 2. 安装 chromdriver: 进入 淘宝镜像源 下载 chromdriver, 可以查看 notes.tx ...

  5. 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 ...

  6. selenium +chrome headless Adhoc模式渲染网页

    mannual和adhoc模式比较 Manual vs. Adhoc In the script above, we start the ChromeDriver server process whe ...

  7. selenium +chrome headless Manual 模式渲染网页

    可以看看这个里面的介绍,写得很好.https://duo.com/blog/driving-headless-chrome-with-python from selenium import webdr ...

  8. ubuntu中如何安装selenium+chrome(headless)无界面浏览器?

    selenium是一个Web的自动化测试工具,它可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生.但是它自身不带浏览器,不支持浏览器的功能,因此它 ...

  9. Selenium及Headless Chrome抓取动态HTML页面

    一般的的静态HTML页面可以使用requests等库直接抓取,但还有一部分比较复杂的动态页面,这些页面的DOM是动态生成的,有些还需要用户与其点击互动,这些页面只能使用真实的浏览器引擎动态解析,Sel ...

随机推荐

  1. 转:ACCESS数据库转ORACLE数据库分享

    来源: 作者:zz 网上有很多文章介绍access转oracle数据库的方法,本人都尝试了,不是很成功,列举一下,后来人不必盲目试了,基本不成功: 1.Access-->excel-->P ...

  2. jsp:jsp包含文件的两种方式

    第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...

  3. mysql:数据库保存时间的类型——int和datetime的区别

    我们都知道,时间保存在数据库中,可以选择使用两种类型,一种是int,一种是datetime 那么,它们两个有什么区别呢?要怎么用呢? 现在和小仓鼠一起来探讨一下 1.int和datetime的使用区别 ...

  4. C#中RichTextBox字体不统一(中英文)

    this.richTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F);// new System.Drawing.Font(& ...

  5. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

  6. 计算最大矩形面积,POJ(2082)

    题目链接:http://poj.org/problem?id=2082 把矩形按照高度一次递增的循序排列,当违反这一规则的时候,更新ans,用新的data替换之前的矩形.然后最后扫一遍. #inclu ...

  7. 最近的阅读list

    fast rcnn 统一了sppnet和rcnn,将原来rcnn分stage的训练合为一个整体的stage,一次完成cls, regression的训练.引入两个loss函数,一个是用来进行cls的, ...

  8. youku服务端

    文件结构 config import os IP_PORT = () BACKLOG = BASE_DIR = os.path.dirname(os.path.dirname(__file__)) B ...

  9. redis 过期回调通知

    redis 过期回调通知 背景 在使用redis的过程中,有时我们会遇到这种情景,当key过期的时候,我们需要去重新做一些操作,比如重新生成value等.之前,一直用的是添加一个celery定时任务, ...

  10. iOS第三方支付(支付宝)

    使用支付宝进行一个完整的支付功能,大致有以下步骤: 与支付宝签约,获得商户ID(partner)和账号ID(seller) 下载相应的公钥私钥文件(加密签名用) 下载支付宝SDK 生成订单信息 调用支 ...