python selenium 浏览器自动化
0 背景
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(1080, 1920)
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')
清除 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