此代码受 selenium 4 支持。 打开浏览器后,我尝试菜单签名,但它不起作用。
消息是。
此浏览器或应用程序可能不安全。了解更多 尝试使用不同的浏览器。如果您已经在使用受支持的浏览器,您可以再次尝试登录。
我看中的解决方案是登录Google帐户。
这是代码:
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import pathlib
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
# chrome_options = Options()
chrome_options = webdriver.ChromeOptions()
# chrome_options.add_experimental_option("debuggerAddress", "localhost:8797")
scriptDirectory = pathlib.Path().absolute()
# scriptDirectory = pathlib.PurePath("../driver")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--disable-web-security")
# chrome_options.add_argument("--user-data-dir=chrome-data")
chrome_options.add_argument("--allow-running-insecure-content")
chrome_options.add_argument('--profile-directory=Profile 8')
prefs = {"profile.default_content_setting_values.notifications": 2}
chrome_options.add_experimental_option("prefs", prefs)
chrome_options.add_argument('disable-infobars')
chrome_options.add_experimental_option("useAutomationExtension", False)
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_argument("user-data-dir=chrome-data")
# TODO: We have to solve the userdata problem it have to in one directory
chrome_options.add_argument(f"user-data-dir={scriptDirectory}\\userdata")
service = Service(executable_path="C:\\Users\\user\\PycharmProjects\\BasicGoogleContact\\chromedriver.exe")
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get("https://basis.org.bd/company-profile/03-09-017")
driver.implicitly_wait(10)
time.sleep(1)
contact_x_path = "//div[@class='card-body pt-0']"
contact_elements = driver.find_element(By.XPATH, contact_x_path)
contact_text = contact_elements.text
print(contact_text)
print("\n..........................")
footer_address_xpath = "//div[@class='footer-address']"
footer_address_elements = driver.find_element(By.XPATH, footer_address_xpath)
footer_address_text = footer_address_elements.text
print(footer_address_text)
input("Stop ..:")
driver.get("https://contacts.google.com/")
email_xpath = "//input[@id='identifierId']"
driver.find_element(By.XPATH, email_xpath).send_keys("sushenbiswasaga")
input("Stop ..:")
由于现有的安全机制,在 Google 服务上实现自动化登录过程可能会很棘手。 Google 经常检测到自动尝试并可能阻止访问。
以下是一些使您的 Selenium 脚本更加健壮的建议:
避免无头模式: 当谷歌检测到无头浏览器时,可能会采取额外的安全措施。尝试在正常模式下运行浏览器而不使用 --headless 选项。
chrome_options.add_argument("--headless")
使用具有匹配版本的 ChromeDriver 和 Chrome 浏览器: 确保您使用的 ChromeDriver 版本与已安装的 Chrome 浏览器兼容。版本不匹配可能会导致问题。
等待元素加载: 使用显式等待来确保元素在与元素交互之前已完全加载。这可以使用 WebDriverWait 来完成。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@id='identifierId']")))
使用用户代理: 为您的浏览器设置用户代理以模仿真实用户。您可以将其添加到您的 Chrome 选项中。
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
验证码和 Google 的自动化系统: 请记住,Google 采用各种安全措施(包括验证码)来防止自动访问。如果 Google 怀疑自动化行为,它可能会提示进行额外验证。
考虑 Google API: 如果您的目标是与 Google 服务交互,请考虑使用官方 API(如果可用)而不是网页抓取,因为它更可靠并且经常受到服务提供商的鼓励。