在本文中,我们将为您详细介绍如何使用硒连接到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(硒怎么使用)
- CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境
- centos7.6上搭建selenium启动chrome+headless无界面模式
- Chrome Headless 模式
- Chrome Headless 模式 (二)——Python+selenium+headerless
如何使用硒连接到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的爬虫环境
【转载请注明出处】: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
最新版本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所缺失的依赖包并下载。
检查是否还缺乏依赖:
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...
下载地址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
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 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
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等相关知识的信息别忘了在本站进行查找喔。
本文标签: