这段代码是用Python编写的,使用了Selenium库,用于自动化进行一系列操作来访问Google搜索控制台,并执行特定的任务。下面我将对代码中的主要部分进行解析,以便理解其作用:
- 导入所需的模块和库:这些模块和库将在代码中使用,以便实现自动化操作。
- 设置登录凭据和URL:将Google账号的用户名和密码以及目标URL进行了设置。
- 配置Chrome浏览器选项:设置了Chromedriver的路径和一些浏览器选项,如无头模式、用户代理、下载目录等。
- 执行登录操作:自动打开Google账号登录页面,填充用户名和密码,模拟登录操作。
- 访问Google搜索控制台:自动打开Google搜索控制台页面。
- 填充URL并执行操作:在搜索控制台页面,找到一个特定的
div
元素,填充一个URL,然后模拟点击”继续”按钮。 - 下载验证的HTML文件:在填充URL后,找到包含下载链接的
div
元素,点击下载链接,以获取验证的HTML文件。 - 最后的操作和清理:在
try
块中执行了一系列操作,如果出现异常则会在except
块中捕获并打印异常。无论是否发生异常,都会在finally
块中关闭浏览器实例,释放资源。
总体来说,这段代码的作用是使用Selenium库自动化执行一系列操作,从登录到Google账号,到访问搜索控制台,填充URL并下载相关文件。这可以用于快速、自动地执行一些重复性的操作,以及进行一些网络爬虫的任务。需要注意的是,网站的结构和行为可能随时变化,因此代码可能需要根据实际情况进行调整和维护。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os
from urllib.parse import urlparse
# 替换为您的Google账号和密码
USERNAME = 'xxx@gmail.com'
PASSWORD = 'xxx'
URL = 'https:/xxxx.com/'
# 请将下面的路径替换为您下载的chromedriver所在的实际路径,chromedriver得跟你系统谷歌浏览器版本对应上
chromedriver_path = r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
# 启动Chrome浏览器
chrome_options = webdriver.ChromeOptions()
# 设置无头模式,可以隐藏浏览器窗口
# chrome_options.add_argument('--headless')
# chrome_options.add_argument('--disable-gpu')
# 设置用户代{过}{滤}理字符串
chrome_options.add_argument(
"--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36")
chrome_options.add_argument('--lang=en')
# 禁用浏览器特性
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
# chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 设置文件下载目录的路径
# download_directory = r"C:\Users\X\Downloads\Telegram Desktop"
parsed_url = urlparse(URL)
domain = parsed_url.netloc
user_path = os.path.expanduser("~")
download_directory = rf"{user_path}\Downloads\{domain}"
# 设置文件下载目录
chrome_options.add_experimental_option("prefs", {
"download.default_directory": download_directory,
"download.prompt_for_download": False, # 禁止下载前询问下载路径
"download.directory_upgrade": True, # 允许覆盖下载
"safebrowsing.enabled": True # 启用安全浏览
})
driver = webdriver.Chrome(executable_path=chromedriver_path, options=chrome_options)
try:
# 登录Google账号
driver.get("https://accounts.google.com")
time.sleep(2)
username_input = driver.find_element(By.ID, "identifierId")
username_input.send_keys(USERNAME)
username_input.send_keys(Keys.ENTER)
time.sleep(2)
# 使用其他等待条件,presence_of_element_located
password_input = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.NAME, "Passwd"))
)
# password_input = driver.find_element(By.NAME, "Passwd")
password_input.send_keys(PASSWORD)
password_input.send_keys(Keys.ENTER)
time.sleep(3)
# 进入Google搜索控制台
driver.get("https://search.google.com/u/0/search-console/welcome")
time.sleep(2)
# 等待搜索控制台页面加载完成
# 假设搜索控制台页面的标题为"Google Search Console"
expected_title = "Welcome to Google Search Console"
# while driver.title != expected_title:
# time.sleep(1)
WebDriverWait(driver, 6).until(EC.title_is(expected_title))
# 定位到data-input-type为2的div
# div_element = driver.find_element(By.CSS_SELECTOR, 'div[data-input-type="2"]')
div_element = driver.find_element(By.XPATH, '//div[@data-input-type="2"]')
# input_type_2_div = WebDriverWait(driver, 3).until(
# EC.presence_of_element_located(
# (By.CSS_SELECTOR, "div[data-input-type='2']"))
# )
div_element.click()
time.sleep(1)
# 在div元素下定位到input框并填充值
input_element = div_element.find_element(By.XPATH, "//input[@aria-label='https://www.example.com']")
input_element.clear() # 清空输入框中原有的值
input_element.send_keys(URL)
time.sleep(1)
# 点击"继续"按钮
# continue_button = div_element.find_element(By.XPATH, "//span[text()='Continue']/ancestor::div[@data-input-type='2']")
continue_button = driver.find_element(By.XPATH, "//div[@data-input-type='2']//span[text()='Continue']")
print(continue_button.get_attribute('outerHTML'))
continue_button.click()
time.sleep(5)
# 下载验证的HTML文件
download_link = driver.find_element(By.XPATH, '//div[contains(text(), "google")][contains(text(), ".html")]')
html = download_link.text
# 找到 "google" 和 ".html" 的索引位置
start_index = html.find('google')
end_index = html.find('.html')
# 使用切片截取子串
result = html[start_index:end_index + 5]
download_link.click()
time.sleep(2)
except Exception as e:
# 关闭浏览器
print(e)
finally:
driver.quit()
评论前必须登录!
注册