GVKun编程网logo

如何使用硒连接到Chromium Headless(硒怎么使用)

13

在本文中,我们将为您详细介绍如何使用硒连接到ChromiumHeadless的相关知识,并且为您解答关于硒怎么使用的疑问,此外,我们还会提供一些关于CentOS6.x搭建:HeadlessChrome

在本文中,我们将为您详细介绍如何使用硒连接到Chromium Headless的相关知识,并且为您解答关于硒怎么使用的疑问,此外,我们还会提供一些关于CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境、centos7.6上搭建selenium启动chrome+headless无界面模式、Chrome Headless 模式、Chrome Headless 模式 (二)——Python+selenium+headerless的有用信息。

本文目录一览:

如何使用硒连接到Chromium Headless(硒怎么使用)

如何使用硒连接到Chromium Headless(硒怎么使用)

我想将无头铬用于使用硒的自动化测试。(https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md)

我确实已经在9222上运行了无头版本。因此,如果我打开http://10.252.100.33:9222/json/,我会得到

[ {   "description": "",   "devtoolsFrontendUrl": "/devtools/inspector.html?ws=127.0.0.1:9223/devtools/page/0261be06-1271-485b-bdff-48e443de7a91",   "id": "0261be06-1271-485b-bdff-48e443de7a91",   "title": "The Chromium Projects",   "type": "page",   "url": "https://www.chromium.org/",   "webSocketDebuggerUrl": "ws://127.0.0.1:9223/devtools/page/0261be06-1271-485b-bdff-48e443de7a91"} ]

下一步,我想将硒连接到无头铬上。但是当我尝试

final DesiredCapabilities caps = DesiredCapabilities.chrome();final WebDriver driver = new RemoteWebDriver(new URL("http://localhost:9222/json"), caps);driver.get("http://www.google.com");

我确实得到以下注销

Jän 24, 2017 7:14:45 PM org.openqa.selenium.remote.ProtocolHandshake createSessionINFORMATION: Attempting bi-dialect session, assuming Postel''s Law holds true on the remote endJän 24, 2017 7:14:45 PM org.openqa.selenium.remote.ProtocolHandshake createSessionINFORMATION: Falling back to original OSS JSON Wire Protocol.Jän 24, 2017 7:14:45 PM org.openqa.selenium.remote.ProtocolHandshake createSessionINFORMATION: Falling back to straight W3C remote end connectionorg.openqa.selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{browserName=chrome, version=, platform=ANY}], required capabilities = Capabilities [{}]Build info: version: ''3.0.1'', revision: ''1969d75'', time: ''2016-10-18 09:49:13 -0700''System info: host: ''Geralds-MacBook-Pro.local'', ip: ''192.168.0.249'', os.name: ''Mac OS X'', os.arch: ''x86_64'', os.version: ''10.12.2'', java.version: ''1.8.0_111''Driver info: driver.version: RemoteWebDriver

问题是:

  • RemoteWebDriver是否是连接无头铬的正确驱动程序?
  • 我阅读了有关DevTool协议(https://docs.google.com/presentation/d/1gqK9F4lGAY3TZudAtdcxzMQNEE7PcuQrGu83No3l0lw/)的信息,但是我不确定如何使用硒创建这样的客户端。
  • 使用Chrome DevTools连接Chromium Headless的工作原理(https://developers.google.com/web/tools/chrome-devtools/remote-debugging/)除了一些分段保管库;-)

答案1

小编典典

我认为自述文件有点误导。您不必自己启动Chromium,也可以使用RemoteWebDriver。确保已安装chromedriver(https://sites.google.com/a/chromium.org/chromedriver/home)。

  • 启动chromedriver(例如./chromedriver./chromedriver --port=9515
  • 然后,您告诉chromedriver使用Chromium而不是Chrome
  • 添加--headless为附加参数

代码应如下所示:

final ChromeOptions chromeOptions = new ChromeOptions();chromeOptions.setBinary("/usr/bin/chromium-browser");chromeOptions.addArguments("--headless");desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);WebDriver driver = new RemoteWebDriver(url, desiredCapabilities);

在Ubuntu Linux上为我工作。

CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境

CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境

【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107890747

Chrome官方网站已经说的很清楚,不再支持6.x的CentOS,至少7以上。 可是很多时候我们使用的服务器版本并不能随便升级,即便已经很难受了,但是还得继续使用低版本,装起来那是真叫一个费劲,还好就是费劲一些,最终还是可以装成功的。

什么是 Headless Chrome

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于出道较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

CentOS版本

lsb_release -a

image.png

最新版本Google-Chrome安装

CentOS/RedHat 7以上安装google-chrome可以完全参考https://intoli.com/blog/insta... (6及以下版本不适用)。

指定yum源

服务器应该指定合适yum源,避免找不到某些依赖的尴尬。
修改 /etc/yum.repos.d/CentOS-Base.repo,可以使用阿里的yum repo:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum clean all
安装google-chrome

根据https://intoli.com/blog/insta... ,执行命令:

curl https://intoli.com/install-google-chrome.sh | bash

脚本会自动检测当前版本安装chrome所缺失的依赖包并下载。
image.png

检查是否还缺乏依赖:

ldd /opt/google/chrome/chrome | grep "not found"

返回为空,说明CentOS下chrome依赖问题基本解决。

运行chrome

执行

google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.suning.com/。

访问成功,在当前目录会生成截图screenshot.png,如果报错

[0100/000000.311368:ERROR:broker_posix.cc(43)] Invalid node channel message

则需要安装依赖包:

yum install  \
 ipa-gothic-fonts \
 xorg-x11-fonts-100dpi \
 xorg-x11-fonts-75dpi \
 xorg-x11-utils \
 xorg-x11-fonts-cyrillic \
 xorg-x11-fonts-Type1 \
 xorg-x11-fonts-misc -y 

最新版本Chromedriver安装

当前的chrome版本是 google-chrome-stable-72.0.3626.109-1.x86_64,chromedrive的官网是https://sites.google.com/a/ch...
image.png
下载地址https://chromedriver.storage....
或者选择taobao镜像下载http://npm.taobao.org/mirrors...
镜像下载地址http://npm.taobao.org/mirrors...

解压后部署到/opt/drivers目录下,尝试运行:

./chromedriver 
Starting ChromeDriver 72.0.3626.7 (efcef9a3ecda02b2132af215116a03852d08b9cb) on port 9515
Only local connections are allowed.
[1550143530.011][SEVERE]: CreatePlatformSocket() returned an error, errno=0: Address family not supported by protocol (97)

另外要修改/etc/hosts,绑定127.0.0.1 localhost,否则,Java Selenium运行时chromedriver可能因为找不到localhost报超时异常

安装selenium

  • 安装 Python 并配置好环境变量

shell输入:python -V 出现对应版本号即安装成功!

  • 安装 pip
    python默认自带 pip 在安装目录的scripts目录下,自行配置至环境变量即可,配置好后shell输入:pip -V 出现对应版本号即安装成功!
  • 安装 selenium
    shell输入:pip install selenium 提示:Successfully installed selenium-即安装成功!
python
>>>from selenium import webdriver
>>>driver = webdriver.Chrome()
>>>driver.get(''https://www.baidu.com'')

已经可以了,正常写python脚本即可。

搭建环境时遇到的问题

1、/lib64/libc.so.6: version `GLIBC_2.14'' not found (required by ./chromedriver)

#查看系统版本
cat /etc/redhat-release 
#查看glibc支持的版本
strings /lib64/libc.so.6 |grep GLIBC_

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz 
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz 
tar -xvf  glibc-2.14.tar.gz 
tar -xvf  glibc-ports-2.14.tar.gz
mv glibc-ports-2.14 glibc-2.14/ports
mkdir glibc-2.14/build
cd glibc-2.14/build 
../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install 

安装编译过程中需要注意三点:

  • 要将glibc-ports解压到glibc目录下
  • 不能在glibc当前目录下运行configure
  • 加上优化开关,export CFLAGS="-g -O2 -march=i486",否则会出现错误
  • 在make install过程中可能会出现 nss_test1加载不了的情况, 此时可以将加载libnss_test1.so.2的地方注释掉,用grep "nss_test1" . -nr命令在 /glibc目录下查找一下,加载的地方也不多(这只是一个测试nss的静态库,可以不要)

2、/lib64/libc.so.6: version `GLIBC_2.16'' not found (required by ./chromedriver)

wget http://ftp.gnu.org/gnu/glibc/glibc-2.16.0.tar.gz 
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.16.0.tar.gz 
tar -xvf  glibc-2.16.0.tar.gz 
tar -xvf  glibc-ports-2.16.0.tar.gz
mv glibc-ports-2.16.0 glibc-2.16.0/ports
mkdir glibc-2.16.0/build
cd glibc-2.16.0/build 
../configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install 

报错

Unmatched ( in regex; marked by  HERE in m/$( <-- HERE if $(abi-64-ld-soname),$(abi-64-ld-soname),ld/ at scripts/test-installation.pl line

可以参考解决办法https://sourceware.org/bugzil...

  • glibc-2.16.0/Makefile
ifeq (,$(install_root))
      CC="$(CC)" $(PERL) scripts/test-installation.pl $(common-objpfx)
endif

改成

ifeq (,$(install_root))
     LD_SO=$(ld.so-version) CC="$(CC)" $(PERL) scripts/test-installation.pl $(common-objpfx)
endif
  • glibc-2.16.0/scripts/test-installation.pl
sub usage {
    print "Usage: test-installation [soversions.mk]\n";

上面添加

if ($ENV{LD_SO}) {
  $LD_SO = $ENV{LD_SO};
} else {
  $LD_SO= "";
}

sub usage {
    print "Usage: test-installation [soversions.mk]\n";

} else {
  if (/^ld\.so/) {
     ($ld_so_name, $ld_so_version)= /=(.*)\.so\.(.*)$/;

上面添加

} elsif ($LD_SO ne "") {
    ($ld_so_name, $ld_so_version) = split (''\.so\.'', $LD_SO);
} else {
  if (/^ld\.so/) {
     ($ld_so_name, $ld_so_version)= /=(.*)\.so\.(.*)$/;
欢迎关注 “后端老鸟” 公众号,接下来会发一系列的专题文章,包括Java、Python、Linux、SpringBoot、SpringCloud、Dubbo、算法、技术团队的管理等,还有各种脑图和学习资料,NFC技术、搜索技术、爬虫技术、推荐技术、音视频互动直播等,只要有时间我就会整理分享,敬请期待,现成的笔记、脑图和学习资料如果大家有需求也可以公众号留言提前获取。由于本人在所有团队中基本都处于攻坚和探路的角色,搞过的东西多,遇到的坑多,解决的问题也很多,欢迎大家加公众号进群一起交流学习。

【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107890747

image

centos7.6上搭建selenium启动chrome+headless无界面模式

centos7.6上搭建selenium启动chrome+headless无界面模式

首先安装Python3及pip

下载python3安装包

  执行命令:wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

 

安装zlib-devel包(后面安装pip需要用到,这里先下载,后面就不用重复编译)

  yum install zlib-devel

 

解压命令: 

  tar -xvf Python-3.6.5.tgz 

将解压文件移动到 usr/local目录下

  mv Python-3.6.5 cd /usr/local

在local目录下创建python3目录

  mkdir /usr/local/python3

转到解压文件夹下

  cd /usr/local/Python-3.6.5

配置安装目录

  ./configure --prefix=/usr/local/python3

编译源码

  make

执行源码安装

  make install或者(make &&make install和上面两步是一个意思)

 

配置软连接

   ln -s /usr/local/python3/bin/python3  /usr/bin/python3

转到根目录

  cd /

输入 python3  看到提示信息表示安装成功

 

安装pip

安装依赖环境

  yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

 

安装setuptools

  wget --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26

  tar -zxvf setuptools-19.6.tar.gz

  cd setuptools-19.6

  python3 setup.py build

  python3 setup.py install

 

安装PIP

  wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb

  tar -zxvf pip-8.0.2.tar.gz 
  cd pip-8.0.2 
  python setup.py build 
  sudo python setup.py install

 

设置软链接

  ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

如软链接设置错误,删除软链接命令

  rm -rf /usr/bin/pip3(后面/usr/bin/pip为软链接名称,切记不能加结尾/  如:/usr/bin/pip3/则表示删除软连接及真实文件)

回到根目录

  cd /

输入pip3 -V查看pip版本,安装成功则正确显示版本

 

 

 

安装chrome

yum在线安装

yum install google-chrome-stable_current_x86_64.rpm

或者指定地址

yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

安装完成之后,检查下版本号

> google-chrome -version

Google Chrome 77.0.3865.90 

chromedriver驱动

下载chromedriver驱动,历史版本http://npm.taobao.org/mirrors/chromedriver找到对应的驱动版本

可以使用wget下载zip包

wget http://npm.taobao.org/mirrors/chromedriver/77.0.3865.40/chromedriver_linux64.zip

解压zip包,如果提示没有zip,那就yum -y install zip先安装下

unzip chromedriver_linux64.zip # 解压zip

解压后把chromedriver移动到/usr/bin/目录下

mv chromedriver /usr/bin/

查看chromedriver版本号

> chromedriver --version

ChromeDriver 77.0.3865.40 (f484704e052e0b556f8030b65b953dce96503217-refs/branch-heads/3865@{#442})

安装selenium

安装最新版selenium 3.141.0

pip3 install selenium

 

运行selenium代码

新建一个.py文件,运行测试代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument(''--headless'') # 无界面 chrome_options.add_argument(''--no-sandbox'') # 解决DevToolsActivePort文件不存在报错问题 chrome_options.add_argument(''--disable-gpu'') # 禁用GPU硬件加速。如果软件渲染器没有就位,则GPU进程将不会启动。 chrome_options.add_argument(''--disable-dev-shm-usage'') chrome_options.add_argument(''--window-size=1920,1080'') # 设置当前窗口的宽度和高度 driver = webdriver.Chrome(''chromedriver'',chrome_options=chrome_options) driver.get("https://www.baidu.com/") print(driver.page_source) driver.quit()

运行代码

 

 

Chrome Headless 模式

Chrome Headless 模式

在 Chrome 59 版本开始已经开始支持了 Headless 模式,也就是无界面模式,这样爬取的时候就不会弹出浏览器了,如果要使用此模式请把 Chrome 升级到 59 版本及以上,启用 Headless 模式的方式如下:

 

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(''--headless'')
# chrome_options.add_argument(''--disable-gpu'')
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.baidu.com")
print(driver.current_url)
driver.close()

 

首先创建一个 ChromeOptions 对象,添加一个 headless 参数,然后在初始化 Chrome 对象的时候通过 chrome_options 传递这个 ChromeOptions 对象,这样我们就可以成功启用 Chrome 的 Headless 模式了。

这样在运行时浏览器的界面就不会弹出了

Chrome Headless 模式 (二)——Python+selenium+headerless

Chrome Headless 模式 (二)——Python+selenium+headerless

selenium 调用 headerless

1. 基础环境:

    我使用的环境:

python:3.5.4

python 的 selenium 库: 3.141.0

chrome 浏览器:  71.0.3578.98

chromedriver 下载地址: http://chromedriver.storage.googleapis.com/index.html

注意:一定要确保 chrome 浏览器和 chromedriver 版本对应,如果不对应,可能会出现各种奇怪的报错

2. selenium 使用 headless 模式

如何通过 selenium 调用 headless 模式呢?  下面是 python 的代码

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
#无头模式
chrome_options.add_argument(''--headless'')
#实例化Chrome driver
driver=webdriver.Chrome(chrome_options=chrome_options)
#打开百度地图
driver.get("https://map.baidu.com/")
#截屏,文件保存为baidu-map.png
driver.save_screenshot("baidu-map.png")

3. 浏览器设置窗口大小

chrome_options.add_argument(''--window-size=1280,800'')

4. 打开新的标签页

      js 代码可 window.open (url) 可在新窗口打开一个网页,dirver 可执行 js 代码,具体代码如下:

js="window.open(''http://www.baidu.com/'')"
driver.execute_script(js)

5. 切换窗口

比如我们打开的第一个页面是 [百度地图], 第 2 个窗口打开的页面是百度。如果我们想在第 2 个页面的输入框输入 selenium, 代码如下

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
#无头模式
chrome_options.add_argument(''--headless'')
#设置窗口大小
chrome_options.add_argument(''--window-size=1280,800'')
#实例化Chrome driver
driver=webdriver.Chrome(chrome_options=chrome_options)
#打开百度地图页面
driver.get("https://map.baidu.com/")

js="window.open(''http://www.baidu.com'')"
driver.execute_script(js)
driver.find_element_by_id("kw").send_keys("selenium")
driver.save_screenshot("baidu-map5.png")
driver.quit()

      但是很奇怪,代码报错了,no such element: Unable to locate element: {"method":"id","selector":"kw"} 找不到这个元素。但是我们看百度的页面命名可以找到这个元素啊。我们在这步操作之前截一张图就可以看出来,页面扔在第一个页面,即百度地图的页面,这时候我们需要切换一些窗口.

注意:以前的方法,diver.switch_to_window () 已经被 driver.switch_to.window 替代

search_windows=driver.current_window_handle
all_handles=driver.window_handles
for handle in all_handles:
    if handle !=search_windows:
        driver.switch_to.window(handle)

6. 关闭窗口和关闭浏览器

  • driver.quit () 关闭浏览器
  • driver.close () 关闭标签页.

 这 2 个的使用场景是不同的:

1) 在我们的 case 执行完对浏览器的操作后,一定要加上 driver.quit () , 不然会导致内存爆满;

2) 如果我们只想关闭一个窗口,则用 driver.close () 

 

7. 添加代理

 

chrome_options.add_argument("--proxy-server=http://" + ip:port)

 

8. 修改 User-Agent

 

# 修改User-Agent
chrome_options.add_argument(''user-agent= ''你想修改成的User-Agent'')

 

9. 禁用图片

 

chrome_options.add_argument(''blink-settings=imagesEnabled=false'')

 

关于如何使用硒连接到Chromium Headless硒怎么使用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境、centos7.6上搭建selenium启动chrome+headless无界面模式、Chrome Headless 模式、Chrome Headless 模式 (二)——Python+selenium+headerless等相关知识的信息别忘了在本站进行查找喔。

本文标签: