Взгляните на этот сайт: https://www.arabam.com/ilan/sahibinden-satilik-mercedes-benz-cla-180-d-style/sahibinden-boyasiz-hasarsiz-cam-tavan-temiz-arac/14229201
Я нажимаю клавишу завершения, чтобы перейти к концу страницы. И затем один за другим он нажимает клавишу «вверх», пока не находит это: введите описание изображения здесь
Это работало просто отлично, но, похоже, больше не работает.
options.add_argument('window-size=1200x600')
prefs = {}
prefs = {"profile.default_content_setting_values.geolocation": 2, "profile.default_content_setting_values.notifications": 2}
options.add_experimental_option("prefs", prefs)
d = webdriver.Chrome(chrome_options=options,
executable_path='./chromedriver')
d.get(features["ad_url"])
# Use send_keys(Keys.HOME) to scroll up to the top of page
d.find_element_by_tag_name('body').send_keys(
Keys.END)
while True:
d.find_element_by_tag_name('body').send_keys(
Keys.UP)
time.sleep(1)
e = d.find_element_by_xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[3]/div")
if e.text:
break
Вот полностью функциональный код, который можно попробовать:
import json
import scrapy
from scrapy.spiders import SitemapSpider
from scrapy.crawler import CrawlerProcess
from selenium import webdriver
from datetime import datetime
from selenium.webdriver.common.keys import Keys
import pickle
import time
class Myspider(SitemapSpider):
name = 'spidername'
sitemap_urls = ['https://www.arabam.com/sitemap/otomobil_1.xml','https://www.arabam.com/sitemap/otomobil_2.xml',
'https://www.arabam.com/sitemap/otomobil_3.xml','https://www.arabam.com/sitemap/otomobil_4.xml',
'https://www.arabam.com/sitemap/otomobil_5.xml','https://www.arabam.com/sitemap/otomobil_6.xml',
'https://www.arabam.com/sitemap/otomobil_7.xml','https://www.arabam.com/sitemap/otomobil_8.xml',
'https://www.arabam.com/sitemap/otomobil_9.xml','https://www.arabam.com/sitemap/otomobil_10.xml',
'https://www.arabam.com/sitemap/otomobil_11.xml','https://www.arabam.com/sitemap/otomobil_12.xml',
'https://www.arabam.com/sitemap/otomobil_13.xml']
sitemap_rules = [
('/otomobil/', 'parse'),
]
custom_settings = {'FEED_FORMAT':'csv','FEED_URI': "arabam_"+str(datetime.today().strftime('%d%m%y'))+'.csv'
}
def parse(self,response):
for td in response.xpath("/html/body/div[3]/div[6]/div[4]/div/div[2]/table/tbody/tr/td[4]/div/a"):
link = td.xpath("@href").extract()
year = td.xpath("text()").extract()
self.crawled.append(link[0])
self.new_links += 1
if int(year[0]) > 2010:
url = "https://www.arabam.com/" + link[0]
yield scrapy.Request(url, callback=self.parse_dir_contents)
def parse_dir_contents(self,response):
features = {}
options = webdriver.ChromeOptions()
# options.add_argument('headless')
options.add_argument('window-size=1200x600')
prefs = {}
prefs = {"profile.default_content_setting_values.geolocation": 2, "profile.default_content_setting_values.notifications": 2}
options.add_experimental_option("prefs", prefs)
d = webdriver.Chrome(chrome_options=options,
executable_path='./chromedriver')
d.get(features["ad_url"])
# Use send_keys(Keys.HOME) to scroll up to the top of page
d.find_element_by_tag_name('body').send_keys(
Keys.END)
while True:
d.find_element_by_tag_name('body').send_keys(
Keys.UP)
time.sleep(1)
e = d.find_element_by_xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[3]/div")
if e.text:
break
overview1 = e.text.split("\n")
yield features
process = CrawlerProcess({
})
process.crawl(Myspider)
process.start() # the script wi
Редактировать: Я прокомментировал и выполнил код, и оказалось, что ключи отправляются. Проблема заключается в попытке найти конкретный c div. Я попытался поставить на него попытку, но это, похоже, не сработало.
в то время как True:
d.find_element_by_tag_name('body').send_keys(
Keys.UP)
time.sleep(1)
try:
e = d.find_element_by_xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[3]/div")
if e.text:
break
except:
pass
Редактировать:
Это то, что я сделал для прокрутки вверх. Но, к сожалению, в большинстве случаев это не работает
for i in range(0,37):
d.find_element_by_tag_name('body').send_keys(
Keys.UP)
time.sleep(1)
e = d.find_element_by_xpath("/html/body/div[3]/div[6]/div[3]/div/div[1]/div[3]/div/div[3]/div[2]/div")
overview1 = e.text.split("\n")
Редактировать: пробовал это. Он прокручивается в поле зрения, но не получает элемент
e = d.find_element_by_xpath("//div[@id = 'js-hook-appendable-technicalPropertiesWrapper' and @class = 'cf' ] ")
actions = ActionChains(d)
actions.move_to_element(e).perform()
wait = WebDriverWait(d, 20)
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@id = 'js-hook-appendable-technicalPropertiesWrapper' and @class = 'cf' ]")))
overview1 = e.text.split("\n")
Редактировать: снимок экрана HTML введите описание изображения здесь