【发布时间】:2020-02-04 23:03:12
【问题描述】:
我写了一个非常长的代码来自动化一些网页浏览。它由 51 个代码块组成,每个代码块由 50 行代码组成,如图所示。我需要多次运行这个脚本,但每次我运行它时,所有这 51 个块都需要稍作调整。到目前为止,我手动进行了小调整,但必须有一种方法可以压缩我的代码并使其更容易多次运行。
在这些块中的每一个中,只有分散在代码块中的 4 行需要更改。有没有办法在某个函数中“包装”其余代码,同时让自己可以选择手动输入 4 行代码,并将其应用于所有 51 个块?
这里是其中一个红色块(图片)的代码示例:
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("website")
driver.find_element_by_id("email").send_keys("email@email.com")
driver.find_element_by_id("password").send_keys("password123")
driver.find_element_by_id("submit").click()
driver.get("website2")
driver.implicitly_wait(30)
driver.find_element_by_id("ui-id-6").click()
day = driver.find_element_by_xpath("/html/body/main/div[2]/div[6]/div[3]/div[4]/div/div[2]/table/tbody/tr[1]/td[2]")
ActionChains(driver).move_to_element(day).click().perform()
WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.XPATH,"/html/body/main/div[2]/div[6]/div[3]/div[4]/div/div[2]/table/tbody/tr/td/ul/li[2]/h3/a[3]")))
driver.execute_script("window.scrollBy(0,500)","")
driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[3]/div[4]/div/div[2]/table/tbody/tr/td/ul/li[2]/h3/a[3]').click()
driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[3]/div[2]/form/div[3]/ul[1]/li[3]/i').click()
driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[3]/div[2]/form/div[3]/ul[1]/li[2]/i').click()
driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[3]/div[2]/form/div[3]/ul[1]/li[1]/i').click()
driver.find_element_by_id('scheduleDate').click()
day = driver.find_element_by_xpath('/html/body/div[4]/table/tbody/tr[5]/td[2]/a')
ActionChains(driver).move_to_element(day).click().perform()
driver.implicitly_wait(30)
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
img = driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[3]/div[2]/form/div[2]/div/div[3]/div[1]/button[2]')
ActionChains(driver).move_to_element(img).click().perform()
driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[4]/div/div[2]/div/ul/li/div[1]/img').click()
driver.execute_script('window.scrollTo(0, 500)')
driver.find_element_by_id("quickpostHashTag").send_keys("tags",(Keys.RETURN))
driver.find_element_by_id("calendarTitle").clear()
driver.find_element_by_id('calendarTitle').send_keys('title')
driver.find_element_by_id('calendarMessage').clear()
driver.find_element_by_id('calendarMessage').send_keys("msg")
driver.implicitly_wait(30)
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
driver.find_element_by_xpath('/html/body/main/div[2]/div[6]/div[3]/div[2]/form/div[4]/a').click()
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
driver.find_element_by_xpath("/html/body/main/div[2]/div[6]/div[3]/div[2]/div/div[3]/div/button[1]").click()
driver.close()
每次运行时都会发生变化的行是 - 由顶部和底部的空格分隔的行,然后是带有“标签”、“标题”和“消息”的行
【问题讨论】:
-
如果没有至少一些示例,可能无法回答您的代码的简化示例。
-
我添加了其中一个重复 51 次的代码块。之后,我需要为每个代码块 (51) 更改这 4 行并再次运行。
标签: python selenium webautomation