原文链接: 使用selenium 刷票
上一篇: 会声会影破解
下一篇: Python for-else 语句
刷票页面进入后需要填入密码
键入密码后,转到投票页面需要一定的时间,我们使用一个进入之后才能出现的类进行显性等待
# 显性等待,当出现 optextinfo 类后进入locator = (By.CLASS_NAME, 'optextinfo')WebDriverWait(browser, 20, 0.5).until(EC.presence_of_element_located(locator))
进入后需要点击checkbox,选择投票的人,一共15个,但是最少选10个
这里使用按键的方式选择,因为使用click会出现点击无效的情况
checks[i].send_keys(Keys.SPACE)# checks[i].click()
选择需要投票的人数后,点击提交后退出即可
使用无头模式,可以加快速度
from selenium import webdriver
import time
import random
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriveroptions = webdriver.ChromeOptions()
# 忽视缺证书警告
options.add_argument('--headless')
options.add_argument('test-type')
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors"])def vote():browser = webdriver.Chrome(chrome_options=options)url = 'http://u196266.a.stonevote.net/poll/ab45e9d4-7c7e-785e-4e08-c1389602d137.html'browser.get(url)# 输入进入的密码browser.find_element_by_id('inputPasswd').send_keys('123456')browser.find_element_by_css_selector('.btn.btn-primary').click()# 显性等待,当出现 optextinfo 类后进入locator = (By.CLASS_NAME, 'optextinfo')WebDriverWait(browser, 20, 0.5).until(EC.presence_of_element_located(locator))checks = browser.find_elements_by_tag_name('input')items = list(range(1, 15))random.shuffle(items)items = items[:9] + [0]print(items)for i in items:print(i, checks[i])# checks[i].click()# 使用click 有时会出现无法点击的错误,会自动退出# 使用space 可以避免这个错误checks[i].send_keys(Keys.SPACE)browser.find_element_by_css_selector('.btn.btn-primary.votesubmitbutton').click()# 发出请求后等待0.5秒后退出time.sleep(0.5)browser.close()def work(cnt):for i in range(cnt):vote()work(30)
先投30次试试