|
@@ -0,0 +1,185 @@
|
|
|
+# 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 = 'huawen001'
|
|
|
+ admin_pwd = 'abcd1234'
|
|
|
+ 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()
|