123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- # coding:utf-8
- from time import sleep
- import datetime
- import openpyxl
- import requests
- from selenium import webdriver
- # 设置Chrome浏览器选项
- from selenium.common import exceptions
- from selenium.webdriver.chrome.service import Service
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.support.wait import WebDriverWait
- from imgcode_ak import image_code
- """
- 根据table的id属性和table中的某一个元素定位其在table中的位置
- table包括表头,位置坐标都是从1开始算
- tableId:table的id属性
- queryContent:需要确定位置的内容
- """
- def get_table_content(driver, tableId, queryContent):
- # 按行查询表格的数据,取出的数据是一整行,按空格分隔每一列的数据
- table_tr_list = driver.find_element(By.ID, tableId).find_elements(By.TAG_NAME, "tr")
- table_list = [] # 存放table数据
- for tr in table_tr_list: # 遍历每一个tr
- # 将每一个tr的数据根据td查询出来,返回结果为list对象
- table_td_list = tr.find_elements(By.TAG_NAME, "td")
- row_list = []
- print(table_td_list)
- for td in table_td_list: # 遍历每一个td
- row_list.append(td.text) # 取出表格的数据,并放入行列表里
- table_list.append(row_list)
- # 循环遍历table数据,确定查询数据的位置
- # for i in range(len(table_list)):
- # for j in range(len(table_list[i])):
- # if queryContent == table_list[i][j]:
- # print("%r坐标为(%r,%r)" % (queryContent, i + 1, j + 1))
- # 写入文件
- def write_excel_xlsx(path, sheet_name, value):
- index = len(value) # 列表中所含元组的个数,从而确定写入Excel的行数
- # 打开Excel
- wb = openpyxl.Workbook()
- # wb = load_workbook(path)
- sheet = wb.active # 获得一个的工作表
- sheet.title = sheet_name
- # 设置格式
- sheet.column_dimensions['B'].width = 115
- # 按行加入
- for i in range(index):
- sheet.append(value[i])
- # 保存文件
- print(sheet.values)
- wb.save(path)
- print("题目写入数据成功!")
- def send_file(url, file_path):
- with open(file_path, 'rb') as file:
- files = {'file': file}
- response2 = requests.post(url, files=files)
- return response2
- def get_element(my_driver, xpaths):
- """
- 判断是否存在元素并获取元素对象
- :param my_driver:
- :param xpaths: xpaths表达式
- :return: 元素对象或为空
- """
- try:
- target = my_driver.find_element(By.XPATH, xpaths)
- except exceptions.NoSuchElementException:
- return False
- else:
- return target
- if __name__ == "__main__":
- # 创建一个 Chrome WebDriver 实例
- options = webdriver.ChromeOptions()
- # options.add_argument("headless")
- # options.add_argument('--headless')
- options.add_argument('--disable-gpu')
- options.add_argument('--no-sandbox')
- options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, '
- 'like Gecko) Chrome/118.0.5993.70 Safari/537.36')
- options.add_argument(" window-size=1920,1080")
- prefs = {'download.prompt_for_download': False, 'download.default_directory': '/Users/xiexiaoyuan/Downloads/'}
- options.add_experimental_option('prefs', prefs)
- s = Service(executable_path='/Users/xiexiaoyuan/chromedriver_mac64_114/chromedriver')
- # s = Service(executable_path='/Users/xi/Desktop/chromedriver')
- driver = webdriver.Chrome(service=s, options=options)
- # driver.maximize_window()
- driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
- "source": """
- Object.defineProperty(navigator, 'webdriver', {
- get: () => undefined
- })
- """
- })
- driver.get('https://data.yongyizixun888.com/index.php?s=member&c=login&m=index')
- sleep(2)
- admin_name = ''
- admin_pwd = ''
- table = driver.find_element(By.XPATH, '//*[@id="myform"]/div[3]/div/div[2]/img')
- table.screenshot(r'pig.png')
- sleep(2)
- # 解析图片验证码
- code = image_code('pig.png')
- if code == "":
- print("获取图片验证码失败")
- print(code)
- # 模拟登录
- # 输入账号
- username = driver.find_element(By.XPATH, '//*[@id="myform"]/div[1]/div/input')
- username.send_keys(admin_name)
- sleep(1)
- # 输入密码
- password = driver.find_element(By.XPATH, '//*[@id="myform"]/div[2]/div/input')
- password.send_keys(admin_pwd)
- sleep(1)
- # 输入验证码
- capter = driver.find_element(By.XPATH, '//*[@id="myform"]/div[3]/div/div[1]/input')
- capter.send_keys(code)
- sleep(1)
- # 登录
- signup = driver.find_element(By.XPATH, '//*[@id="myform"]/div[4]/button')
- signup.click()
- sleep(5)
- # 没有登录成功重试
- account = driver.find_element(By.XPATH, '//*[@id="dr_member_info"]/a[1]').text
- print(account)
- if account != admin_name:
- # 解析图片验证码
- table = driver.find_element(By.XPATH, '//*[@id="myform"]/div[3]/div/div[2]/img')
- table.screenshot(r'pig.png')
- code = image_code('pig.png')
- if code == "":
- print("获取图片验证码失败")
- # 输入验证码
- capter = driver.find_element(By.XPATH, '//*[@id="myform"]/div[3]/div/div[1]/input')
- capter.clear()
- capter.send_keys(code)
- sleep(1)
- # 登录
- signup = driver.find_element(By.XPATH, '//*[@id="myform"]/div[4]/button')
- signup.click()
- sleep(2)
- account = driver.find_element(By.XPATH, '//*[@id="dr_member_info"]/a[1]').text
- print(account)
- if account == admin_name:
- # 跳转首页
- driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div[3]/ul/li[1]/a').click()
- sleep(2)
- a = driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/div[2]/div[2]/a')
- print(a.get_attribute("href"))
- a.click()
- # 下载涌溢完整数据库
- sleep(1)
- b = driver.find_element(By.XPATH, '/html/body/div[4]/div[1]/div[2]/div[3]/a')
- print(b.get_attribute("href"))
- b.click()
- sleep(10)
- print("下载成功")
- else:
- print("登录失败")
- driver.close()
|