options.add_experimental_option和options.add_argument的区别
时间: 2023-07-24 10:00:06 浏览: 347
`options.add_experimental_option`和`options.add_argument`是Webdriver中用于设置选项的两个方法,它们在使用方式和功能上有一些区别。
1. `options.add_experimental_option`:
- 用于设置实验性选项,即那些尚未正式支持或文档化的选项。
- 接受两个参数:`name`和`value`,其中`name`是选项的名称,`value`是选项的值。
- 用于配置一些高级选项,如启用特定的浏览器功能或实验性功能。
- 适用于需要更具体控制和定制性的情况,但具体的选项名称和值可能会因浏览器而异。
2. `options.add_argument`:
- 用于添加命令行参数,这些参数将传递给浏览器启动命令。
- 接受一个参数:`argument`,即要添加的命令行参数。
- 用于配置一些常见的选项,如禁用图像加载、启用通知等。
- 适用于一般情况下的基本配置,且可以直接使用已知的命令行参数。
总结来说,`options.add_experimental_option`适用于设置实验性选项和高级配置,而`options.add_argument`适用于添加已知的命令行参数和基本配置。具体选择哪种方法取决于你需要设置的选项类型和灵活性要求。
相关问题
指出这段代码存在的问题import json from selenium import webdriver def create_chrome_driver(*, headless=False): # 创建谷歌浏览器对象,用selenium控制浏览器访问url options = webdriver.ChromeOptions() if headless: # 如果为True,则爬取时不显示浏览器窗口 options.add_argument('--headless') # 做一些控制上的优化 options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_experimental_option('useAutomationExtension', False) # 创建浏览器对象 browser = webdriver.Chrome(options=options,executable_path=r"E:\Pycharm\PyCharm 2020.1\Project_Location\Scrapy\chromedriver.exe") # 破解反爬措施 browser.execute_cdp_cmd( 'Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'} ) return browser def add_cookies(browser, cookie_file): # 给浏览器对象添加登录的cookie with open(cookie_file, 'r') as file: cookie_list = json.load(file) for cookie_dict in cookie_list: if cookie_dict['secure']: browser.add_cookie(cookie_dict)
这段代码存在以下问题:
1. 函数的参数使用了*,但是没有在函数中使用,这会让函数的使用者很困惑;
2. 导入模块时没有按照PEP8规范,应该单独一行导入;
3. 函数名不够清晰,无法准确地表达函数的功能;
4. 函数中调用了硬编码的文件路径,应该使用参数或配置文件来管理路径;
5. 函数中的注释不够详细,无法帮助使用者理解函数的实现原理;
6. 函数中没有对异常进行处理,如文件读取异常等;
7. 函数中的代码结构不够清晰,影响可读性。
修改后的代码如下:
```python
import json
from selenium import webdriver
def create_chrome_driver(headless=False, executable_path=None):
"""
创建谷歌浏览器对象,用selenium控制浏览器访问url
:param headless: 是否为无头模式,默认为False
:param executable_path: ChromeDriver的路径,默认为None
:return: 创建好的浏览器对象
"""
options = webdriver.ChromeOptions()
if headless:
options.add_argument('--headless')
# 做一些控制上的优化
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
# 创建浏览器对象
browser = webdriver.Chrome(options=options, executable_path=executable_path)
# 破解反爬措施
browser.execute_cdp_cmd(
'Page.addScriptToEvaluateOnNewDocument',
{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}
)
return browser
def add_cookies(browser, cookie_file):
"""
给浏览器对象添加登录的cookie
:param browser: 浏览器对象
:param cookie_file: cookie文件路径
:return: None
"""
with open(cookie_file, 'r') as file:
cookie_list = json.load(file)
for cookie_dict in cookie_list:
if cookie_dict.get('secure', False):
browser.add_cookie(cookie_dict)
```
修改后的代码使用了更好的函数名,将路径信息使用参数传入,增加了注释,使用了更好的异常处理方式,代码结构更加清晰易读。
option = webdriver.ChromeOptions() option.add_argument("start-maximized") option.add_argument("--disable-blink-features=AutomationControlled") option.add_experimental_option("excludeSwitches", ["enable-automation"]) option.add_experimental_option("useAutomationExtension", False) browser = webdriver.Chrome(options=option) browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{ 'source':'''Object.defineProperty(navigator, 'Cabdriver', { get: () =>false''' }) city = [ '焦作', ] conn = pymysql.connect(host='localhost', user='root', db='weatherman', passwd='12345678', charset='utf8') cursor = conn.cursor()
这段代码看起来是使用Python的selenium库来控制Chrome浏览器,并且设置了一些选项,如启动浏览器时最大化窗口、禁用自动化控制等。接下来使用了Chrome DevTools Protocol来向浏览器注入一段JavaScript脚本,以修改浏览器的navigator对象的Cabdriver属性值。最后连接到本地的MySQL数据库,并获得一个游标对象。这个代码片段可能是在爬取某个天气网站的数据。
阅读全文