用Python 3 + Selenium 3實現漢堡王客戶調查的自動填寫,能夠用來做爲 python selenium的入門學習實現腳本,列舉了幾個比較不太好弄的知識點。python
上代碼:ios
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import unittest from selenium.webdriver.common.keys import Keys import time class TellBK(unittest.TestCase): def setUp(self) -> None: self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) def test_fillFeedBack(self): driver = self.driver driver.maximize_window() driver.get('https://tellburgerking.com.cn') time.sleep(10) # Page 1 - Welcome # 點擊繼續 element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//input[@id="NextButton"]'))) element.click() # Page 2 - Fill the codes and continue # 填寫調查代碼, FeedbackCode.txt保存調查代碼,3個一組,空格分開 codefile = open('FeedbackCode.txt', 'r') feedbackcode = codefile.read().split(" ") codefile.close() for i in range(len(feedbackcode)): driver.find_element_by_xpath('//input[@id="CN{}"]'.format(i+1)).send_keys(feedbackcode[i]) # 點擊開始 driver.find_element_by_xpath('//input[@id="NextButton"]').submit() # Page 3 - Page 12 radiovaluelist = [('simpleInput rblv', 2), ('simpleInput rblv', 2), ('simpleInput rblv', 1), ('simpleInput rbl', 5), ('simpleInput rbl', 5), ('simpleInput rbl', 5), ('simpleInput rbl', 5), ('simpleInput rbl', 9), ('simpleInput rbl', 2), ('simpleInput rbl', 5)] for radiovalue in radiovaluelist: self.selectRadiosSubmit(radiovalue) # Page 13 - Say something with open('HappyReason.txt') as filereason: reasontext = filereason.read() driver.find_element_by_xpath('//textarea[@id="S000122"]').send_keys(reasontext) # Next driver.find_element_by_xpath('//input[@id="NextButton"]').submit() # Page 14 - What you ordered element = self.driver.find_element_by_id("R000091") self.driver.execute_script("arguments[0].click();", element) driver.find_element_by_xpath('//input[@id="NextButton"]').submit() element = self.driver.find_element_by_id("R000097") self.driver.execute_script("arguments[0].click();", element) driver.find_element_by_xpath('//input[@id="NextButton"]').submit() # Page 16 - Page 19 radiovaluelist = [('simpleInput rbl', 1), ('simpleInput rblv', 5), ('simpleInput rblv', 2), ('simpleInput rblv', 1), ] for radiovalue in radiovaluelist: self.selectRadiosSubmit(radiovalue) # Page - Gender and age driver.find_element_by_xpath("//select[@id='R069000']").find_element_by_xpath("//option[@value='2']").click() time.sleep(3) driver.find_element_by_xpath("//select[@id='R070000']").find_element_by_xpath("//option[@value='3']").click() driver.find_element_by_xpath('//input[@id="NextButton"]').submit() time.sleep(3) # Page - Share zip code driver.find_element_by_xpath('//input[@id="NextButton"]').click() time.sleep(10) # Page - Last page get screenshot driver.get_screenshot_as_file('%s.png' % time.strftime("%Y%m%d.%H.%M.%S")) def selectRadiosSubmit(self, radioattribute): elements = self.driver.find_elements_by_xpath( '//input[@class="{}" and @value="{}"]'.format(radioattribute[0], radioattribute[1])) print(len(elements)) for element in elements: self.driver.execute_script("arguments[0].click();", element) time.sleep(3) self.driver.find_element_by_xpath('//input[@id="NextButton"]').submit() time.sleep(3) def tearDown(self) -> None: self.driver.quit() if __name__ == "__main__": unittest.main()
須要注意的幾個問題:web