I've written a Python script that randomly selects radio buttons for each question, and submits the google form. My main questions for improvement are:
- Algorithm: I collect all the buttons into a 2D array, then use
random.choiceto select the radio buttons based on each nested array. I'm sure there's a better way to do this, since my algorithm is basically hard coded. - Performance: I know
random.choicetakes a lot more time than other methods, but it's the only way I know enough to write with it. - Wait Time: Right now, I wait .75 seconds before entering in another form. I'm wondering if there's a way to wait for the page to load completely, rather than wait and hope that it loads fast enough to not generate a page not found error.
script.py
#run with python3 from selenium import webdriver import random import time #Setup paths and open chrome browser chrome_path = "desktop/code/python/driver/chrome/chromedriver" website_path = "https://docs.google.com/forms/d/e/1FAIpQLSdcWrIYQlNbywuLg276z0CbBw-GyQOj_s2ncR9qVA7F7FPARQ/viewform" driver = webdriver.Chrome(chrome_path) driver.get(website_path) #Define options based on each section #EXCEPT: 9 18 25 28 31 (for text areas) options = [ [0, 1, 2, 3], [4, 5, 6], [7, 8], [10, 11], [12, 13, 14, 15], [16, 17], [19, 20, 21], [22, 23, 24], [26, 27], [29, 30], [32, 33] ] #Main loop def main(counter): count = counter + 1 #Collect all buttons on page and submit button buttons = driver.find_elements_by_xpath("//*[@class='freebirdFormviewerViewItemsRadioOptionContainer']") submit = driver.find_element_by_xpath("//*[@class='quantumWizButtonPaperbuttonLabel exportLabel']") """ Randomly chooses an option from the 2D array based on what i is, and that number is the index of `buttons`, which the button in that index will be clicked """ for i in range(len(options)): buttons[random.choice(options[i])].click() #Submit form submit.click() #Go to previous page, which will be the form driver.execute_script("window.history.go(-1)") #Output how many forms have been submitted thus far print(f"Form #{count} has been submitted!") #Wait for page to load again, then call main to run again time.sleep(.75) main(count) if __name__ == '__main__': main(0)