chrome实用参数

1 --allow-outdated-plugins 不停用过期的插件。
2 --allow-running-insecure-content 默认情况下,https 页面不允许从 http 链接引用 javascript/css/plug-ins。添加这一参数会放行这些内容。
3 --allow-scripting-gallery 允许拓展脚本在官方应用中心生效。默认情况下,出于安全因素考虑这些脚本都会被阻止。
4 --disable-accelerated-video 停用 GPU 加速视频。
5 --disable-dart 停用 Dart。
6 --disable-desktop-notifications 禁用桌面通知,在 Windows 中桌面通知默认是启用的。
7 --disable-extensions 禁用拓展。
8 --disable-file-system 停用 FileSystem API。
9 --disable-preconnect 停用 TCP/IP 预连接。
10 --disable-remote-fonts 关闭远程字体支持。SVG 中字体不受此参数影响。
11 --disable-speech-input 停用语音输入。
12 --disable-web-security 不遵守同源策略。
13 --disk-cache-dir 将缓存设置在给定的路径。
14 --disk-cache-size 设置缓存大小上限,以字节为单位。
15 --dns-prefetch-disable 停用DNS预读。
16 --enable-print-preview 启用打印预览。
17 --extensions-update-frequency 设定拓展自动更新频率,以秒为单位。
18 --incognito 让浏览器直接以隐身模式启动。
19 --keep-alive-for-test 最后一个标签关闭后仍保持浏览器进程。(某种意义上可以提高热启动速度,不过你最好得有充足的内存)
20 --kiosk 启用kiosk模式。(一种类似于全屏的浏览模式)
21 --lang 使用指定的语言。
22 --no-displaying-insecure-content 默认情况下,https 页面允许从 http 链接引用图片/字体/框架。添加这一参数会阻止这些内容。
23 --no-first-run 跳过 Chromium 首次运行检查。
24 --no-referrers 不发送 Http-Referer 头。
25 --no-sandbox 彻底停用沙箱。
26 --no-startup-window 启动时不建立窗口。
27 --proxy-pac-url 使用给定 URL 的 pac 代理脚本。(也可以使用本地文件,如 --proxy-pac-url="file:\\\c:\proxy.pac")
28 --proxy-server 使用给定的代理服务器,这个参数只对 http 和 https 有效。(例如 --proxy-server=127.0.0.1:8087 )
29 --single-process 以单进程模式运行 Chromium。(启动时浏览器会给出不安全警告)
31 --user-agent 使用给定的 User-Agent 字符串

最常用参数:

30 --start-maximized 启动时最大化。

32.download.default_directory": download_dir  设置下载路径

33.directory_upgrade": True, 

34.safebrowsing.enabled": True 是否提示安全警告


参数:--user-data-dir=UserDataDir
用途:自订使用者帐户资料夹(如:–user-data-dir="D:\temp\Chrome User Data")
参数:--process-per-tab
用途:每个分页使用单独进程
参数:--process-per-site
用途:每个站点使用单独进程
参数:--in-process-plugins
用途:插件不启用单独进程

参数:--disable-popup-blocking
用途:禁用弹出拦截
参数:--disable-javascript
用途:禁用JavaScript
参数:--disable-java
用途:禁用Java
参数:--disable-plugins
用途:禁用插件
参数:–disable-images
用途:禁用图像
参数:--omnibox-popup-count=”num”
用途:将网址列弹出的提示选单数量改为num个
参数:--enable-vertical-tabs
用途:调整chrome游览器标签存放在左边,非顶部
from selenium import webdriver
option = webdriver.ChromeOptions()

# 添加启动参数
option.add_argument()

# 添加扩展应用 
option.add_extension()
option.add_encoded_extension()

# 添加实验性质的设置参数 
option.add_experimental_option()

# 设置调试器地址
option.debugger_address()




常用配置参数:
from selenium import webdriver
option = webdriver.ChromeOptions()

# 添加UA
options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')

# 指定浏览器分辨率
options.add_argument('window-size=1920x3000') 

# 谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--disable-gpu') 

 # 隐藏滚动条, 应对一些特殊页面
options.add_argument('--hide-scrollbars')

# 不加载图片, 提升速度
options.add_argument('blink-settings=imagesEnabled=false') 

# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
options.add_argument('--headless') 

# 以最高权限运行
options.add_argument('--no-sandbox')

# 手动指定使用的浏览器位置
options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" 

#添加crx插件
option.add_extension('d:\crx\AdBlock_v2.17.crx') 

# 禁用JavaScript
option.add_argument("--disable-javascript") 

# 设置开发者模式启动,该模式下webdriver属性为正常值
options.add_experimental_option('excludeSwitches', ['enable-automation']) 

# 禁用浏览器弹窗
prefs = {  
    'profile.default_content_setting_values' :  {  
        'notifications' : 2  
     }  
}  
options.add_experimental_option('prefs',prefs)


driver=webdriver.Chrome(chrome_options=chrome_options)





浏览器地址栏参数:
about:version - 显示当前版本
about:memory - 显示本机浏览器内存使用状况
about:plugins - 显示已安装插件
about:histograms - 显示历史记录
about:dns - 显示DNS状态
about:cache - 显示缓存页面
about:gpu -是否有硬件加速
chrome://extensions/ - 查看已经安装的扩展

一,chrome浏览器设置

from selenium import webdriver
# 浏览器选项
chrome_options = webdriver.ChromeOptions()
# 使用headless无界面浏览器模式
chrome_options.add_argument('--headless')
# 解决DevToolsActivePort文件不存在的报错
chrome_options.add_argument('--no-sandbox')
# 谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--disable-gpu')
# 设置默认编码为utf-8
chrome_options.add_argument('lang=zh_CN.UTF-8')
# 隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('--hide-scrollbars')
# 禁止加载图片
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 指定浏览器分辨率
chrome_options.add_argument('window-size=1440x900')
# 设置默认请求头
chrome_options.add_argument('user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X)AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"')
# 设置代理
self.chrome_options.add_argument("--proxy-server=http://183.131.14.78:8118")   使用代理
desired_capabilities = chrome_options.to_capabilities()
desired_capabilities['proxy'] = {
    "httpProxy":PROXY,
    "ftpProxy":PROXY,
    "sslProxy":PROXY,
    "noProxy":None,
    "proxyType":"MANUAL",
    "class":"org.openqa.selenium.Proxy",
    "autodetect":False
}
# 启动浏览器,获取网页源代码
driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
# 显示页面源码
html = driver.page_source
# 关闭当前页面
driver.close()
# 退出浏览器
driver.quit()

  

二,Firefox浏览器设置

from selenium import webdriver
# 浏览器选项
firefox_options = webdriver.FirefoxOptions()
# 使用headless无界面浏览器模式
firefox_options.add_argument('--headless')
# 解决DevToolsActivePort文件不存在的报错
chrome_options.add_argument('--no-sandbox')
# 谷歌文档提到需要加上这个属性来规避bug
firefox_options.add_argument('--disable-gpu')
# 设置默认编码为utf-8
firefox_options.add_argument('lang=zh_CN.UTF-8')
# 隐藏滚动条, 应对一些特殊页面
firefox_options.add_argument('--hide-scrollbars')
# 禁止加载图片
firefox_options.add_argument('blink-settings=imagesEnabled=false')
# 指定浏览器分辨率
firefox_options.add_argument('window-size=1440x900')
# driver.maximize_window()
# 设置默认请求头
firefox_options.add_argument('user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X)AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"')
# 设置代理
desired_capabilities = firefox_options.to_capabilities()
desired_capabilities['proxy'] = {
    "httpProxy":PROXY,
    "ftpProxy":PROXY,
    "sslProxy":PROXY,
    "noProxy":None,
    "proxyType":"MANUAL",
    "class":"org.openqa.selenium.Proxy",
    "autodetect":False
}
# 启动浏览器,获取网页源代码
driver = webdriver.Firefox(options=firefox_options)
driver.get(url)
# 显示页面源码
html = driver.page_source
# 关闭当前页面
driver.close()
# 退出浏览器
driver.quit() 

三.undetected_chromedriver

undetected_chromedriver 可以防止浏览器特征被识别,并且可以根据浏览器版本自动下载驱动。

安装方式:

pip3.8 install undetected_chromedriver

 

简单使用

import ssl
import os
import undetected_chromedriver as uc   # pip3.8 install undetected_chromedriver
from selenium import webdriver


class Papunika(object):
    def __init__(self):
        self.xpath = ["BorlabsCookieBox", "mys-wrapper", "google-center-div", "abgc", "cbb"]
        self.main()

    def main(self):
        # 浏览器选项
        chrome_options = webdriver.ChromeOptions()
        # 使用headless无界面浏览器模式
        # chrome_options.add_argument('--headless')
        # 解决DevToolsActivePort文件不存在的报错
        chrome_options.add_argument('--no-sandbox')
        # 谷歌文档提到需要加上这个属性来规避bug
        chrome_options.add_argument('--disable-gpu')
        # 设置默认编码为utf-8
        chrome_options.add_argument('--lang=zh-CN')
        # 隐藏滚动条, 应对一些特殊页面
        chrome_options.add_argument('--hide-scrollbars')
        chrome_options.add_argument("--proxy-server=192.168.104.134:7890")
        # chrome_options.add_argument('–user-data-dir=C:/Users/cf.yu/AppData/Local/Google/Chrome/User Data')
        # chrome_options.add_argument('--profile-directory=Default')
        # 禁止加载图片
        chrome_options.add_argument('blink-settings=imagesEnabled=false')
        # 指定浏览器分辨率
        chrome_options.add_argument('--start-maximized')
        ssl._create_default_https_context = ssl._create_unverified_context

        uc.TARGET_VERSION = 99  # 指定chrome版本
        driver = uc.Chrome(options=chrome_options)
        driver.get('https://papunika.com/')
        for i in range(100000):
            number = input("")
            handles = driver.window_handles
            driver.switch_to.window(handles[-1])
            url = driver.current_url
            page = driver.page_source
            # print(page)
            print(url, save_path, handles)
            path = '/'.join(save_path.split("/")[:-1])
            self.save_file(save_path, page, path)

        driver.close()



    def save_file(self, file_name, page, path):
        if not os.path.exists(path):
            os.makedirs(path)
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(page)


if __name__ == "__main__":
    Papunika()

三.常用操作

四,部署

1 centos7无桌面环境部署

Xvfb(X virtual framebuffer)是一个虚拟显示服务器,不需要显示设备也能模拟运行图形界面

1.1 安装 Xvfb:

yum install -y xorg-x11-server-Xvfb bzip gtk3

1.2 启动虚拟桌面坏境,保持后台运行。

Xvfb :54321 -ac &

:54321是服务启动的端口号,可以任意设置,与下一步保持一致就行

1.3 配置环境变量

vim /etc/profile
export DISPLAY=:54321

source /etc/profile
端口号和上面一致,冒号不能漏

1.4 安装selenium

pip3.6 install selenium

2 安装chrome

第一种
curl https://intoli.com/install-google-chrome.sh | bash   # 安装chrome 安装的是最新版本的chrome

rpm -qa|grep google-chrome    # 查看已安装的软件

rpm -e --noscripts google-chrome-stable   # 卸载以安装的chrome浏览器

第二种(推荐第二种安装)
安装相关依赖
yum -y install redhat-lsb* liberation-fonts vulkan libXss* libappindicator* libgbm

下载google-chrome 最新RPM安装包
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

安装google-chrome
rpm -ivh google-chrome-stable_current_x86_64.rpm

第三种(简单方便)
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

第四种
打开网站 http://dist.control.lth.se/public/CentOS-7/x86_64/google.x86_64/下载对应版本的rpm文件
 wget http://dist.control.lth.se/public/CentOS-7/x86_64/google.x86_64/google-chrome-stable-124.0.6367.118-1.x86_64.rpm
 yum install google-chrome-stable-124.0.6367.118-1.x86_64.rpm 

查看google-chrome版本
google-chrome --version

2.1 测试chrome是否安装成功

google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.suning.com/   # 在当前路径下生成一张截图。

2.2 下载最新版本的chromedriver

https://chromium.cypress.io/   最新浏览器驱动下载,需要FQ
https://registry.npmmirror.com/binary.html?path=chrome-for-testing/

https://sites.google.com/a/chromium.org/chromedriver/downloads
https://googlechromelabs.github.io/chrome-for-testing/
http://chromedriver.storage.googleapis.com/index.html

# 解压
unzip chromedriver_linux64.zip

# 测试
./chromedriver

# 加入环境变量
mv chromedriver /usr/bin/
chmod 777 /usr/bin/chromedriver

vim /etc/profile
export PATH="$PATH:/usr/local/chromedriver"
source /etc/profile

# 或者运行的时候指定路径
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/root/yu/01-chromedriver/chromedriver')

  

2.3 安装chrome 报错

错误:Package: google-chrome-stable-79.0.3945.88-1.x86_64 (/google-chrome-stable_current_x86_64)
          Requires: libc.so.6(GLIBC_2.16)(64bit)
原因是glibc 版本过低  要升级  我升级到2.17

2.3.1 原先的系统glibc库的版本是2.12,需要升级到2.17版本。

下载地址: http://ftp.gnu.org/gnu/glibc/

2.3.2 安装部署

mkdir /root/glibc

cd /root/glibc

wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz

tar -xf glibc-2.17.tar.gz

cd glibc-2.17

mkdir build; cd build

../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

make -j 8

make install

strings /lib64/libc.so.6 | grep GLIBC  # 查看glibc版本

2.4 启动程序测试

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('window-size=1440x900')
b = webdriver.Chrome(executable_path='/root/bws/chromedriver', chrome_options=chrome_options)
b.get('http://www.baidu.com')
print(b.page_source)
b.quit()

3 安装firefox

yum -y install firefox  # 安装firefox浏览器

firefox --version   # 查看firefox浏览器版本

或者
cd /usr/local
wget https://ftp.mozilla.org/pub/firefox/releases/72.0b9/linux-x86_64/en-US/firefox-72.0b9.tar.bz2
tar -jxvf firefox-72.0b9.tar.bz2
ln -s /usr/local/firefox/firefox /usr/bin/firefox
rm -rf firefox-72.0b9.tar.bz2

3.2 下载最新版本的geckodriver

https://github.com/mozilla/geckodriver/releases
https://download-installer.cdn.mozilla.net/pub/firefox/releases/

# 解压
wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
tar -zxvf geckodriver-v0.26.0-linux64.tar.gz

# 测试
./geckodriver

# 加入环境变量
mv chromedriver /usr/bin/

/etc/profile
export PATH="$PATH:/usr/local/geckodriver"
source /etc/profile

# 或者运行的时候指定路径
driver = webdriver.firefox(firefox_options=firefox_options, executable_path='/root/yu/01-geckodriver/geckodriver')

3.3 启动程序测试

from selenium import webdriver
b = webdriver.Firefox(executable_path='/root/yu/01-geckodriver/geckodriver')
b.get('http://www.baidu.com')
print(b.page_source)
b.quit()

3.4 标签添加属性

var leafArr = $('.leaflet-marker-icon'); leafArr.each(function(){$(this).attr('name',$(this).text())})

3.5 删除标签 

document.querySelectorAll('.nk-gap-2, .code-block,#BorlabsCookieBoxWrap,#BorlabsCookieBox').forEach(node=>node.remove())