Пользовательская команда l oop для селена? - PullRequest
0 голосов
/ 21 апреля 2020

Я хотел бы сделать команду l oop до go вниз по столбцу флажков и сделать проверку селенового веб-драйвера 10, а затем прокрутить вниз и продолжить в течение заданного числа повторений.

Мне удалось закодировать первый щелчок флажка и прокрутить вниз после. Мне нужно иметь возможность создать строку XPATH для следующих флажков и сделать al oop до go для заданного количества раундов.

Это мой код до сих пор

wait = WebDriverWait(driver, 20)
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#u_0_u > div > div > div > div:nth-child(3) > div > "
                                                                  "div:nth-child(2) > table > tbody > tr:nth-child(1) "
                                                                  "> ""td:nth-child(1) > label > span")))

actions = ActionChains(driver)
actions.move_to_element(element).perform()
driver.execute_script("arguments[0].click();", element)

time.sleep(10)
driver.execute_script("window.scrollTo(0,400)")

Это XPATH с переменной, которую необходимо последовательно изменить в полужирный

//*[@id="u_0_u"]/div/div/div/div[3]/div/div[2]/table/tbody/**tr[1]**/td[1]/label/span

Вот HTML для первых 3 строк.

<tr class=""><td class=" _100u"><label class="_55sg _kv1"><input name="select_single_row_checkbox[]" type="checkbox" value="100003109554020"><span class="_66ul"></span></label></td><td class=" _100u"><div direction="left" class="clearfix"><div class="_ohe lfloat"><img src="https://graph.facebook.com/100003109554020/picture?width=32&amp;height=32" class="img _8o _8r img" alt=""></div><div class=""><div class="_42ef _8u"><div><a data-hovercard="/ajax/hovercard/user.php?id=100003109554020" class="_3cb8" href="/100003109554020">Caio Augusto</a></div></div></div></div></td><td class=" _100u"><abbr aria-label="4 days ago" class="livetimestamp" data-utime="1587140162">04/17/20</abbr></td></tr>

<tr class=""><td class=" _100u"><label class="_55sg _kv1"><input name="select_single_row_checkbox[]" type="checkbox" value="100033497255249"><span class="_66ul"></span></label></td><td class=" _100u"><div direction="left" class="clearfix"><div class="_ohe lfloat"><img src="https://graph.facebook.com/100033497255249/picture?width=32&amp;height=32" class="img _8o _8r img" alt=""></div><div class=""><div class="_42ef _8u"><div><a data-hovercard="/ajax/hovercard/user.php?id=100033497255249" class="_3cb8" href="/100033497255249">Cam Ailiff</a></div></div></div></div></td><td class=" _100u"><abbr aria-label="a week ago" class="livetimestamp" data-utime="1586814525">04/13/20</abbr></td></tr>

<tr class=""><td class=" _100u"><label class="_55sg _kv1"><input name="select_single_row_checkbox[]" type="checkbox" value="691216152"><span class="_66ul"></span></label></td><td class=" _100u"><div direction="left" class="clearfix"><div class="_ohe lfloat"><img src="https://graph.facebook.com/691216152/picture?width=32&amp;height=32" class="img _8o _8r img" alt=""></div><div class=""><div class="_42ef _8u"><div><a data-hovercard="/ajax/hovercard/user.php?id=691216152" class="_3cb8" href="/691216152">Dave Anderson</a></div></div></div></div></td><td class=" _100u"><abbr aria-label="7 weeks ago" class="livetimestamp" data-utime="1582826382">02/27/20</abbr></td></tr>

Посоветуйте, пожалуйста, как сделать это возможным.

1 Ответ

0 голосов
/ 23 апреля 2020
import time

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

option = Options()

option.add_argument("--disable-infobars")
option.add_argument("--disable-extensions")

option.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 2})

driver = webdriver.Chrome(options=option, executable_path='PATH TO CHROME DRIVER')

driver.get("https://www.facebook.com/CHANGE_PAGE_USERNAME_HERE/settings/?tab=people_and_other_pages&ref=page_edit")
time.sleep(2)
driver.find_element_by_xpath("//input[@id='email']").send_keys("EMAIL")
driver.find_element_by_xpath("//input[@id='pass']").send_keys("PASS")
time.sleep(2)
driver.find_element_by_xpath("//input[starts-with(@id, 'u_0_')][@value='Log In']").click()

time.sleep(5)
driver.refresh()
#time.sleep(5) #turn on to sort through banned
#driver.find_element_by_xpath("//*[@id='u_0_u']/div/div/div/div[3]/div/div[1]/div[1]/a/span[1]").click()
#time.sleep(5)
#driver.find_element_by_xpath("//*[@id='js_s']/div/ul/li[4]/a").click()
#time.sleep(9)

f = 1
whitelist = 5000
while f <= whitelist:
    driver.execute_script('window.scrollBy(0,5000)')
    time.sleep(1)
    f += 1
    continue

wait = WebDriverWait(driver, 10)

driver.execute_script("scrollBy(0,0);")
toggle_all = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_0_u']/div/div/div/div[3]/div/div[2]/table/"
                                                              "thead/tr/th[1]/label/span")))
actions = ActionChains(driver)
actions.move_to_element(toggle_all).perform()
driver.execute_script("arguments[0].click();", toggle_all)

wait = WebDriverWait(driver, float(.0001))
i = 1
targets = 100  # this is where you change how many checkboxes will be selected
while i <= targets:
    xpath_string = "//*[@id='u_0_u']/div/div/div/div[3]/div/div[2]/table/tbody/tr[" + str(i) + "]/td[1]/label/span"
    element = wait.until(EC.element_to_be_clickable((By.XPATH, xpath_string)))
    actions = ActionChains(driver)
    actions.move_to_element(element).perform()
    driver.execute_script("arguments[0].click();", element)
    i += 1
    continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...