如果电脑上没有chrome浏览器或者当前chrome浏览器不是最新版,请先去chrome官网下载安装最新版chrome浏览器
https://www.google.cn/chrome/index.html
ChromeDriver是一种用于自动化和控制Google Chrome浏览器的工具。它是一个开源的项目,由Google维护,并提供给开发者使用。ChromeDriver充当一个桥梁,允许自动化测试工具或脚本与Chrome浏览器进行交互。
具体来说,ChromeDriver通过与Chrome浏览器通信,执行各种操作,如打开网页、模拟用户输入、获取页面元素等。这对于自动化测试、网页抓取、自动化任务等场景非常有用。
一般来说,如果你想使用Selenium(一个用于自动化测试的工具)来自动化Chrome浏览器,你需要下载并配置ChromeDriver。Selenium将通过ChromeDriver与Chrome浏览器进行通信,从而实现自动化测试脚本的执行。
打开Chrome浏览器后,如下图所示进行操作
然后就可以看到我们Chrome浏览器的版本了:
注意:如果你的Chrome浏览器是最新版,一般就不用看了,ChromeDriver也安装最新版即可!!
相同版本号只需第一位数字相同即可,比如Chrome版本号是120.0.6099.110,所以ChromeDriver下载版本号120开头的即可
ChromeDriver最新版本链接:https://googlechromelabs.github.io/chrome-for-testing/
打开链接后如下图所示:
按照自己电脑的系统选择url进行下载
(win系统的不区分64位和32位,电脑64位的下载win32就行)
4. 完成复制后,不要急着关闭文件夹,复制一下当前文件路径,也就是chrome.exe的所在路径,后面会用到,比如:C:\Program Files (x86)\Google\Chrome\Application(系统默认安装位置)
pip install selenium
pip install time
现在前面的准备工作已全部就绪,先贴完整python代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import time
# 初始化selenium
url = 'https://wenshu.court.gov.cn/website/wenshu/181029CR4M5A62CH/index.html?'
option = webdriver.ChromeOptions()
option.add_argument('--start-maximized')
option.add_experimental_option('excludeSwitches', ['enable-automation'])
# 'profile.default_content_settings.popups': 0 == 禁用弹出窗口
# 'download.default_directory': 'D:\Desktop\wenshu' == 设置默认下载路径
# 'profile.default_content_setting_values.automatic_downloads': 1 == 并设置自动下载的选项
prefs = {'profile.default_content_settings.popups': 0,
'download.default_directory': 'D:\wenshu', # 设置自己的下载路径
'profile.default_content_setting_values.automatic_downloads': 1}
option.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=option)
# 设置打开的浏览器窗口最大化
driver.maximize_window()
driver.set_page_load_timeout(30)
driver.get(url)
# 转到登录界面自动输入手机号密码进行登录
driver.find_element(By.XPATH, '//*[@id="loginLi"]/a').click()
text = driver.page_source
time.sleep(10) # 等待页面渲染
# 进入iframe框
iframe = driver.find_elements(By.TAG_NAME, 'iframe')[0]
driver.switch_to.frame(iframe)
# 下面的‘手机号’‘密码’输入自己中国裁判文书网注册的真实手机号密码
username = driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div[1]/div/div/div/input')
username.send_keys('手机号')
time.sleep(3)
username = driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div[2]/div/div/div/input')
username.send_keys('密码')
time.sleep(2)
driver.find_element(By.XPATH, '//*[@id="root"]/div/form/div/div[3]/span').click()
time.sleep(3)
# 必须加上表单退出,否者就是死元素无法定位
driver.switch_to.default_content()
# 这行代码的作用就相当于你手动点了一下‘刑事案件’那个按钮
# 要下载民事案件就把下一行代码里的刑事案件改成‘民事案件’,以此类推
driver.find_element(By.LINK_TEXT, '刑事案件').click()
time.sleep(10)
# testHtml(driver.page_source)
_lastWindow = driver.window_handles[-1]
driver.switch_to.window(_lastWindow)
# 选择案件批量下载
# 这行代码的作用就相当于你手动点了一下‘法院层级’那个按钮
# driver.find_element(By.LINK_TEXT, '法院层级').click()
# 按照裁判日期排序显示最新600条
# driver.find_element(By.LINK_TEXT, '裁判日期').click()
# 按照裁判日期从前到后显示最老600条
# driver.find_element(By.LINK_TEXT, '裁判日期').click()
# 按照审判程序排序显示最新600条
# driver.find_element(By.LINK_TEXT, '审判程序').click()
# 按照审判程序从前到后显示最老600条
# driver.find_element(By.LINK_TEXT, '审判程序').click()
# 将每页文件数设置为最大,15条
page_size_box = Select(driver.find_element(By.XPATH, '//*[@id="_view_1545184311000"]/div[8]/div/select'))
page_size_box.select_by_visible_text('15')
def test_exceptions(xpath):
try:
driver.find_element(By.XPATH, xpath)
return True
except:
return False
page = 1
# 最多显示600条文件,也就是40页
while page <= 40:
time.sleep(5+page/10)
for i in range(15):
time.sleep(5+i/10)
event_xpath = '//*[@id="_view_1545184311000"]/div[' + str(i+3) + ']/div[6]/div/a[2]'
if test_exceptions(event_xpath) == True:
driver.find_element(By.XPATH, event_xpath).click()
else:
event_xpath = '//*[@id="_view_1545184311000"]/div[' + str(i+3) + ']/div[5]/div/a[2]'
if test_exceptions(event_xpath) == True:
driver.find_element(By.XPATH, event_xpath).click()
# 下一页按钮,不能用Xpath定位,因为“下一页”按钮位置不固定
# driver.find_element(By.LINK_TEXT, '下一页').click()
time.sleep(5)
driver.find_element(By.LINK_TEXT, '下一页').click()
# 必须加上表单退出,否者就是死元素无法定位
driver.switch_to.default_content()
page += 1
# 关闭整个浏览器窗口并终止与浏览器的会话
driver.quit()
代码也配置无误后,运行代码会自动弹出一个chrome浏览器窗口界面
弹出界面显示下图输入验证码时需要用户手动输入并点击确定:
正常情况下不需要用户进行任何操作。输入账号、密码,点击登录按钮登录这些都是会自动执行的!!!
代码中很多操作都设置有延迟几秒的操作,所以代码运行过程中只要没有中断,网页突然自动关闭,就没问题。大家不要着急,只需耐心等待即可。
'download.default_directory': 'D:\xxx\xxx',
分隔符注意用单个的反斜线'\';可以是不存在的路径,会自动创建该路径
line 37: username.send_keys('XXX') XXX改为自行注册的手机号
line 42: username.send_keys('XXX') XXX改为注册时设置的密码