Как напечатать ссылки категории на странице, используя ChromeDriver Chrome и Selenium через Python? - PullRequest
0 голосов
/ 21 марта 2019

Используя Python3, я пытаюсь заставить Chrome Webdriver и Selenium идентифицировать различные категории «Объявления» на веб-странице www.jtinsight.com и оттуда распечатать названия категорий. На данный момент, используя приведенный ниже код, я могу распечатать первые два - «Все категории» и «Автомобили (частные)». Я определил, что HTML для этих двух отличается от других, и попробовал несколько различных строк кода, которые я перечислил в закомментированном коде, но не могу определить правильный тег / class / xpath и т. Д. Любая помощь будет оценена.

from selenium import webdriver
from selenium.webdriver.common.by import By

# Creating the WebDriver object using the ChromeDriver
driver = webdriver.Chrome()

# Directing the driver to the defined url
driver.get("https://www.jtinsight.com/JTIRA/JTIRA.aspx#!/main")

# Locate the categories

# Each code line runs but only returns the first two categories
# categories = driver.find_elements_by_xpath('//div[@class="col-md-3 col-sm-4 col-xs-6"]')
# categories = driver.find_elements_by_xpath('//div[@class="mainCatEntry"]')
# categories = driver.find_elements_by_xpath('//div[@class="Description"]')

# Process ran but finished with exit code 0
# categories = driver.find_elements_by_xpath('//*[@class="col-md-3 col-sm-4 col-xs-6 ng-scope"]')
# categories = driver.find_elements_by_xpath('//div[@class="col-md-3 col-sm-4 col-xs-6 ng-scope"]')
# categories = driver.find_elements_by_partial_link_text('//href[@class="divLink"]')
# categories = driver.find_elements_by_tag_name('bindonce')
# categories = driver.find_elements_by_xpath('//div[@class="divLink"]')

# Error before finished running
# categories = driver.find_elements(By.CLASS_NAME, "col-md-3 col-sm-4 col-xs-6 ng-scope")
# categories = driver.find_elements(By.XPATH, '//div bindonce[@class="col-md-3 col-sm-4 col-xs-6 ng-scope"]')
# categories = driver.find_elements_by_class_name('//div bindonce[@class="col-md-3 col-sm-4 col-xs-6 ng-scope"]')

# Print out all categories on current page
num_page_items = len(categories)
print(num_page_items)
for i in range(num_page_items):
    print(categories[i].text)

# Clean up (close browser once task is completed.)
driver.close()

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Это действительно проблема времени.Если бы я добавил «sleep (5)» перед сбором категорий, он обнаружил все 24. Интересно, что когда я вместо этого использовал WebDriverWait, он все равно будет отображать только 2 элемента.Итак, чтобы заставить водителя сделать немного больше работы, я расширил xpath.у меня сработало следующее:

categories = WebDriverWait(driver, 10).until(
EC.visibility_of_all_elements_located((By.XPATH, '//div[@class="mainCatEntry"]/div[@class="Description"]')))
0 голосов
/ 22 марта 2019

Для идентификации различных объявлений категорий на веб-странице https://www.jtinsight.com/JTIRA/JTIRA.aspx#!/main и печати названий категорий, например Все категории , Автомобили (частные) и т. Д.,вам нужно прокрутить немного вниз и вызвать WebDriverWait для visibility_of_all_elements_located(), и вы можете использовать следующее решение:

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.jtinsight.com/JTIRA/JTIRA.aspx#!/main")
    driver.execute_script("arguments[0].scrollIntoView(true);",WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='ng-scope' and text()='Classifieds']"))));
    print([elem.get_attribute("innerHTML") for elem in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='mainCatEntry']//div[@class='Description']")))])
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...