python - 如何在常规 chrome 而不是 chromedriver 中运行 selenium 代码?
问题描述
这是一个示例代码来解释我的问题。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def test():
username = "gmail"
password = "password"
driver = webdriver.Chrome("C://Users//Dell//Desktop//chromedriver.exe")
driver.implicitly_wait(15)
driver.get("http://www.facebook.com")
elem = driver.find_element_by_name("email")
elem.send_keys(username)
elem = driver.find_element_by_name("pass")
elem.send_keys(password)
elem.send_keys(Keys.RETURN)
#code after logging
test()
每当我运行此代码时,代码都会在单独的 chromedriver 窗口中运行。
我希望我的代码在登录 facebook 后做一些事情。每次我重定向到 facebook,网站都会要求我允许通知。因此,整个屏幕变黑,唯一可点击的元素是弹出窗口。所以所有其他元素都变得不可点击。所以我得到这个错误。
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate
element:
如果我可以在我已经允许/拒绝 facebook 通知的常规浏览器中运行此代码。弹出窗口不会再次出现,错误也不会发生。
如何在常规浏览器中运行此代码?
解决方案
您可以使用此配置简单地关闭弹出通知:
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# config to remove pop ups
opt = Options()
opt.add_argument("--disable-infobars")
opt.add_argument("start-maximized")
opt.add_argument("--disable-extensions")
# you can change the values below. 0 means off and 1 means on.
opt.add_experimental_option("prefs", { \
"profile.default_content_setting_values.media_stream_mic": 1,
"profile.default_content_setting_values.media_stream_camera": 0,
"profile.default_content_setting_values.geolocation": 0,
"profile.default_content_setting_values.notifications": 1
})
def test():
username = "gmail"
password = "password"
driver = webdriver.Chrome("C://Users//Dell//Desktop//chromedriver.exe", options=opt)
driver.implicitly_wait(15)
driver.get("http://www.facebook.com")
elem = driver.find_element_by_name("email")
elem.send_keys(username)
elem = driver.find_element_by_name("pass")
elem.send_keys(password)
elem.send_keys(Keys.RETURN)
#code after logging
test()
这是一个非常简单的修复,您可以通过将 1 更改为 0 来禁用通知。
推荐阅读
- math - 在 PARI GP 中传递用户定义函数之外的值
- c - 有没有办法从返回的 char* 中安全地收集数据?
- python - 如何从python列表中的dict中提取值
- r - 按多列分组并按顺序标记组?
- python - 试图随机化哪个函数在 discord.py 中运行但发生错误
- .net - 语法错误中出现 JSON 解析异常:Malformed token dotnet-try
- php - PayPal Guest Checkout - 根据提供的国家代码更改国家
- signaturepad - SigPlus.Net 联网平板电脑 - Windows
- jestjs - 无法使用 npm i jest 安装 jest
- c++ - 有没有一种新方法可以在 C++ 中对数组进行洗牌?