python selenium 浏览器自动化

python selenium 浏览器自动化

0 背景

python selenium 浏览器自动化

Python 的 Selenium 是一个强大的工具,用于自动化 Web 浏览器操作。它广泛应用于网页测试、数据抓取和自动化任务。

本文主要是在一些基本的 selenium 操作之上,记录在部分场景下的其他操作。

1 使用

前置条件

from selenium import webdriver
dr = webdriver.Chrome()
# or
dr = webdriver.FireFox()

驱动下载

chrome:

https://registry.npmmirror.com/binary.html?path=chromedriver/

firefox:

https://github.com/mozilla/geckodriver/releases

edge:

https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

ie:

https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

加载插件

options = webdriver.ChromeOptions()
options.add_extension('d:crxAdBlock_v2.17.crx')

设置代理

有时用于 mitmproxy 时用, windows 在此之前导入证书 mitmproxy-ca-cert.p12

options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=https://127.0.0.1:8000')
dr = webdriver.Chrome(options=options)
from selenium import webdriver
# 静态IP:102.23.1.105:2005
# 阿布云动态IP:http://D37EUYTR6VT4W2:CERTYEB345HU90@proxy.abuyun.com:9020
PROXY = "proxy_host:proxy:port"
options = webdriver.ChromeOptions()
desired_capabilities = 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(desired_capabilities = desired_capabilities)

设置默认下载路径且不弹出提示

chrome:

options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups'0'download.default_directory'r'E:temp','download.prompt_for_download':False}
options.add_experimental_option('prefs', prefs)
dr = webdriver.Chrome(options=options)

截图并保存

dr.save_screenshot('E:/orange.jpg')

设置无图模式

不显示图片

options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images"2}
options.add_experimental_option("prefs", prefs)

prefs 写法:

prefs = {
    'profile.default_content_setting_values': {
        'images'2
    }
}

2表示不显示图片, 1表示显示图片.

或者

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

设置无头模式

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
dr = webdriver.Chrome(options=options)

窗口分辨率

最大化窗口

dr.maximize_window()

自定义窗口分辨率

dr.set_window_size(10801920)
options = webdriver.ChromeOptions()
options.add_argument("--window-size=1920,1080")
options.add_argument('window-size=1920x3000')

隐藏滚动条

options.add_argument('--hide-scrollbars')

远程 DEBUG

options.add_argument('--remote-debugging-port=9222')

隐藏”正受到自动测试软件的控制”提示

options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])

或者

options.add_argument('disable-infobars')

指定 chromedriver 路径

dr = webdriver.Chrome(executable_path=r"./chromedriver.exe")

指定 chrome 程序路径

有时因为使用绿色版的 Chrome 程序, 但又不在环境变量里面, 因此可以指定 chrome 的路径

options = webdriver.ChromeOptions()
options.binary_location = "D:/programs/chrome/chrome.exe"

使用自定义 userdata 目录

可以是全新的文件夹, 也可以是 chrome 自己的

options.add_argument('--user-data-dir=D:/programs/chrome/selenium')

模拟移动设备

设置自定义 User-Agent

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('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"')

避免密码提示框的弹出

options = webdriver.ChromeOptions()
prefs = {
    'credentials_enable_service':False,
    'profile.password_manager_enabled':False
}
options.add_experimental_option("prefs", prefs)

加载插件

options = webdriver.ChromeOptions()
extensionPath = 'D:/extension/XPath-Helper_v2.0.2.crx'
options.add_extension(extensionPath)

设置编码格式

options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8')
dr = webdriver.Chrome(chrome_options = options)

忽略 https 错误

options.add_argument('--ignore-certificate-errors')

cookie

清除 cookies

driver.delete_all_cookies()

携带 cookie

driver.add_cookie({'name':'ABC','value':'DEF'})
driver.get_cookies()

执行 js

# 通过 js 新打开一个窗口
driver.execute_script('window.open("https://www.baidu.com");')

# 通过 js 移动到最下
time.sleep(3)    # 等待 页面加载/Ajax数据返回
driver.execute_script( "var q=document.documentElement.scrollTop=10000" )

# 通过 js 返回所有html
driver.execute_script( "return document.documentElement.outerHTML" )

2 关于

欢迎关注我的微信公众号


原文始发于微信公众号(其之):python selenium 浏览器自动化

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204829.html

(1)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!