У меня есть хитрая работа, которую я не могу понять, ответ (ы) для!
Страница, с которой я пытаюсь получить данные, имеет несколько div
, которыесодержит те же class
, сложенные в списке, в котором я выполнил xpath
, за которым следует click()
, как описано ниже:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.example.com/list')
driver.find_element_by_xpath("//*[text()='My pages']").click();
username = driver.find_element_by_name('email')
username.send_keys('email@email.com')
password = driver.find_element_by_id('password')
password.send_keys('password')
password.submit()
find = driver.find_element_by_xpath('//div[@class="card"]')
find.click()
Теперь, когда я на новой странице, мне удалосьзахватите детали, которые я хочу использовать:
def get_elements_by_xpath_text(driver, xpath):
return [entry.text for entry in driver.find_elements_by_xpath(xpath)]
def get_elements_by_xpath_href(driver, xpath):
return [entry.get_attribute("href") for entry in driver.find_elements_by_xpath(xpath)]
link_entries = [
("HREF", "//div[@class='col']//a[@rel]"),]
text_entries = [
("FACT 1", "//div[@class='fact' and contains(span, '')][1]"),
("FACT 2", "//div[@class='fact' and contains(span, '')][2]"),
("FACT 3", "//div[@class='fact' and contains(span, '')][3]"),
("FACT 4", "//div[@class='fact' and contains(span, '')][4]"),
]
with open('list.csv', 'ab') as fd:
csv_output = csv.writer(fd)
csv_output.writerow([name for name, xpath in text_entries or link_entries])
entries = []
for name, xpath in text_entries:
entries.append(get_elements_by_xpath_text(driver, xpath))
for name, xpath in link_entries:
entries.append(get_elements_by_xpath_href(driver, xpath))
csv_output.writerows(zip(*entries))
Затем следует driver.back()
, чтобы вернуться к ../list
, где у меня начинает болеть голова ...
Проблема 1: Как мне заставить скрипт цикл этот процесс перейти к следующему //div[@class="card"]
? Имейте в виду, что все div
имеют одинаковые class
! Я пытался использовать EC.element_to_be_clickable((By.ID, 'card')
, но не получил его на работу ...
Проблема 2: Когда проблема 1 решена, возникает другая проблема, и это то, что отображаемый списокВ нижней части страницы есть функция «Загрузить больше»: Как заставить скрипт зацикливаться на Задаче 1, пока кнопка «Загрузить больше» и далее не зацикливаться на Задаче 1, пока не появится следующее «Загрузить еще» (и т. д. ...)?
Если у вас есть другие предложения или комментарии, не стесняйтесь спрашивать или дайте мне знать! Заранее спасибо