一、前言
- 本功能主要是模拟浏览器操作,自动填写问卷。
- 需要手动操作:需要自己下载一下Chrome的驱动,在我前面文章爬虫的模拟浏览器登录有网址
二、代码
import random
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from msedge.selenium_tools import EdgeOptions
from msedge.selenium_tools import Edge
def run(flag):
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
bro = webdriver.Chrome(executable_path="./chromedriver.exe",
options=option)
bro.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',
{'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})
bro.get("https://www.wjx.cn/vm/QbxSLgk.aspx")
min_check = 1
def get_arr(num):
arr = []
for i in range(1, num + 1):
arr.append(i)
return arr
def get_random(arr):
num = arr[random.randint(0, len(arr) - 1)]
arr.remove(num)
return num
num = 5
bro.find_element_by_xpath(xpath='//*[@id="div1"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 10
bro.find_element_by_xpath(xpath='//*[@id="div2"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 13
bro.find_element_by_xpath(xpath='//*[@id="div3"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 5
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div4"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 9
column = 5
for row in range(0, num):
bro.find_element_by_xpath(
xpath='//*[@id="drv5_' + str(row + 1) + '"]/td[' + str(random.randint(1, column)) + ']').click()
num = 9
column = 5
for row in range(0, num):
bro.find_element_by_xpath(
xpath='//*[@id="drv6_' + str(row + 1) + '"]/td[' + str(random.randint(1, column)) + ']').click()
num = 8
arr = get_arr(num)
sum = random.randint(min_check, 5)
for i in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div7"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
is_buy = 1
bro.find_element_by_xpath(xpath='//*[@id="div8"]/div[2]/div[' + str(is_buy) + ']/span').click()
if is_buy == 2:
num = 7
arr = get_arr(num)
sum = random.randint(min_check, num)
for row in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div33"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
else:
num = 10
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div9"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 10
arr = get_arr(num)
sum = random.randint(min_check, num)
for j in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div10"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 5
bro.find_element_by_xpath(xpath='//*[@id="div11"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 4
bro.find_element_by_xpath(xpath='//*[@id="div12"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 6
bro.find_element_by_xpath(xpath='//*[@id="div13"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 9
arr = get_arr(num)
sum = random.randint(min_check, 5)
for i in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div14"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 6
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div15"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 16
column = 5
for row in range(0, num):
bro.find_element_by_xpath(
xpath='//*[@id="drv16_' + str(row + 1) + '"]/td[' + str(random.randint(1, column)) + ']').click()
num = 5
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(xpath='//*[@id="div17"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 4
bro.find_element_by_xpath(xpath='//*[@id="div18"]/div[2]/div[' + str(random.randint(1, num)) + ']').click()
num = 5
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
check_item = str(get_random(arr))
print("check_item:", check_item)
bro.find_element_by_xpath(xpath='//*[@id="div19"]/div[2]/div[' + str(check_item) + ']/span').click()
time.sleep(1)
if check_item == "1":
num_item = 4
arr_item = get_arr(num_item)
sum_item = random.randint(min_check, num_item)
for i in range(0, sum_item):
bro.find_element_by_xpath(
xpath='//*[@id="div20"]/div[2]/div[' + str(get_random(arr_item)) + ']').click()
elif check_item == "2":
num_item = 3
arr_item = get_arr(num_item)
sum_item = random.randint(min_check, num_item)
for i in range(0, sum_item):
bro.find_element_by_xpath(
xpath='//*[@id="div21"]/div[2]/div[' + str(get_random(arr_item)) + ']').click()
elif check_item == "3":
num_item = 5
arr_item = get_arr(num_item)
sum_item = random.randint(min_check, num_item)
for i in range(0, sum_item):
bro.find_element_by_xpath(
xpath='//*[@id="div22"]/div[2]/div[' + str(get_random(arr_item)) + ']').click()
elif check_item == "4":
num_item = 4
arr_item = get_arr(num_item)
sum_item = random.randint(min_check, num_item)
for i in range(0, sum_item):
bro.find_element_by_xpath(
xpath='//*[@id="div23"]/div[2]/div[' + str(get_random(arr_item)) + ']').click()
elif check_item == "5":
num_item = 3
arr_item = get_arr(num_item)
sum_item = random.randint(min_check, num_item)
for i in range(0, sum_item):
bro.find_element_by_xpath(
xpath='//*[@id="div24"]/div[2]/div[' + str(get_random(arr_item)) + ']').click()
num = 10
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(
xpath='//*[@id="div25"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 5
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(
xpath='//*[@id="div26"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 7
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(
xpath='//*[@id="div27"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 14
column = 5
for row in range(0, num):
bro.find_element_by_xpath(
xpath='//*[@id="drv28_' + str(row + 1) + '"]/td[' + str(random.randint(1, column)) + ']').click()
check_try = random.randint(1, 2)
bro.find_element_by_xpath(xpath='//*[@id="div29"]/div[2]/div[' + str(check_try) + ']').click()
if check_try == 1:
num = 4
bro.find_element_by_xpath(
xpath='//*[@id="div30"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
num = 6
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(
xpath='//*[@id="div31"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
num = 7
arr = get_arr(num)
sum = random.randint(min_check, num)
for i in range(0, sum):
bro.find_element_by_xpath(
xpath='//*[@id="div32"]/div[2]/div[' + str(get_random(arr)) + ']/span').click()
is_propaganda = random.randint(1, 2)
bro.find_element_by_xpath(xpath='//*[@id="div34"]/div[2]/div[' + str(is_propaganda) + ']/span').click()
if is_propaganda == 1:
check_buy = random.randint(1, 2)
bro.find_element_by_xpath(xpath='//*[@id="div35"]/div[2]/div[' + str(check_buy) + ']').click()
if check_buy == 1:
num = 2
bro.find_element_by_xpath(
xpath='//*[@id="div36"]/div[2]/div[' + str(random.randint(1, num)) + ']/span').click()
bro.find_element_by_xpath(xpath='//*[@id="ctlNext"]').click()
if flag == 0:
time.sleep(1)
bro.find_element_by_xpath(xpath='//*[@id="alert_box"]/div[2]/div[2]/button').click()
time.sleep(1)
bro.find_element_by_xpath(xpath='//*[@id="rectMask"]').click()
else:
time.sleep(1)
check_time = 2
for i in range(check_time):
bro.find_element_by_xpath(xpath='//*[@id="alert_box"]/div[2]/div[2]/button').click()
time.sleep(1)
if i == 0:
bro.find_element_by_xpath(xpath='//*[@id="rectMask"]').click()
print("点击了验证")
time.sleep(5)
print("滑动")
action = webdriver.ActionChains(bro)
span = bro.find_element_by_xpath(xpath='//*[@id="nc_' + str(i + 1) + '_n1z"]')
action.drag_and_drop_by_offset(span, 300, 0).perform()
action.release()
time.sleep(3)
bro.find_element_by_xpath(xpath='//*[@id="ctlNext"]').click()
time.sleep(10)
bro.quit()
for i in range(200):
try:
run(0)
print("第", i + 1, "次填表完成")
except Exception as result:
print(result)
finally:
time.sleep(10)