Задача 1 : Как щелкнуть по следующему элементу div
того же класса (отдельная страница), очистить страницу, вернуться назад и щелкнуть следующий элемент div
? Поскольку все элементы имеют одинаковое имя класса и содержат уникальную ссылку на отдельные страницы, которые я хотел бы очистить, возникает проблема, что мне нужно найти элемент-> Перейти на страницу-> Очистить информацию-> Вернуться назад->Перейти к следующему элементу и так далее. Решено:
Задача 2 : Как выполнить печать в формате CSV для печати текста, а НЕ путей xpath. См. Код, используемый ниже:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager
driver.get('https://www.example.com/list/')
# Loop load more in list
loadmore = True
while loadmore:
try:
next_link = driver.find_element_by_xpath('//button[@id="show-more"]')
next_link.click()
except NoSuchElementException:
rows_remaining = False
# Open Csv file
File = open('list.csv', 'w')
writer = csv.writer(File)
entries = [] # defines entries
writer.writerows((entries))
# Collect all the elements
elements = driver.find_elements_by_css_selector("a[href*='/stockholm/']")
# Loop through each element to scrape
urls=[]
for element in elements:
urls.append(element.get_attribute('href'))
print(element.get_attribute('href')) # gets the href value of the element
# Define Xpath
def get_elements_by_xpath(driver, xpath):
return [entry.text for entry in driver.find_elements_by_xpath(xpath)]
for url in urls:
driver.get(url)
facts = [
("//div[@class='fact' and contains(span, '')][1]"),
("//div[@class='fact' and contains(span, '')][2]"),]
for name, xpath in facts:
entries.append(get_elements_by_xpath(driver, xpath))
writer.writerow(facts)
Этот код используется для печати в CSV на одной странице и без зацикливания URL-адресов:
facts = [
("//div[@class='fact' and contains(span, '')][1]"),
("//div[@class='fact' and contains(span, '')][2]"),]
with open('list.csv', 'a') as f:
writer = csv.writer(f)
entries = []
for name, xpath in facts:
entries.append(get_elements_by_xpath(driver, xpath))
writer.writerows(zip(*entries))