Скрипт Selenium (python) для повторяющейся задачи, которой не хватает эффективности - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть скрипт ниже, скопированный и вставленный 51 раз, создавая 2300 строк кода, чтобы выполнить ту же задачу, с одной строкой кода, изменяющейся для каждого блока, 51 раз. У меня есть два вопроса в этом проекте:

1. Как можно получить в терминале подсказку с просьбой ввести пользовательские данные для 3 переменных, которые сценарий использует 51 раз? Переменные:

- Часть '#entries' в, driver.find_element_by_id("quickpostHashTag").send_keys("**#entries**",(Keys.RETURN))

- Часть 'Title' в, driver.find_element_by_id('calendarTitle').send_keys('**Title**')

-The 'Des c' часть, driver.find_element_by_id('calendarMessage').send_keys('**Desc**')

И 2. Можно ли создать список с 51-элементным X-путями и мой скрипт может получить пути к элементам один за другим и циклически проходя действия? - Строка:

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()

Является ли путь элемента (1/51), который является единственной частью, изменяющейся в этих 51 копии / вставленные скрипты, упомянутые ранее, и единственная часть этого изменения пути - это ... / li [2] / ... как говорится 1,2,3 ... 49,50,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("pass123")
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[4]/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("#entries",(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('Desc')
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()

1 Ответ

0 голосов
/ 01 февраля 2020
  1. использовать вход () https://docs.python.org/3/library/functions.html#input
>>> entries, title, desc = input().split()
input1 input2 input3
>>> entries
'input1' (output)

использовать string.split ('/') https://docs.python.org/3/library/stdtypes.html#str .split
>> s = 'html/body/main/div[2]/div[6]/div[3]/div[4]/div/div[2]/table/tbody/tr/td/ul/li[2]/h3/a[3]'
>> li = s.split('/')
>> li
['html', 'body', 'main', 'div[2]', 'div[6]', 'div[3]', 'div[4]', 'div', 'div[2]', 'table', 'tbody', 'tr', 'td', 'ul', 'li[2]', 'h3', 'a[3]']
>> for i in li:
    #do_something
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...