Веб-мастер Selenium Python не нажимает кнопку «Загрузить еще» - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в этом, так что извините, если я что-то путаю. Я пишу веб-мастер Selenium с Python, чтобы очистить все заголовки и даты из архивов статей NYTimes.

Вот ссылка: https://www.nytimes.com/search?dropmab=true&endDate=20120103&query=&sections=Business%7Cnyt%3A%2F%2Fsection%2F0415b2b0-513a-5e78-80da-21ab770cb753&sort=best&startDate=20070101

В нижней части страницы есть кнопка «Показать больше», которая загружает еще 10 статей при каждом нажатии на нее. Поэтому я хочу, чтобы это щелкнуло кнопку «Показать больше», пока не осталось больше статей для загрузки, а затем очистил всю страницу для заголовков и дат. Вот моя попытка:

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
from selenium.common.exceptions import TimeoutException
import pandas as pd


options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_argument('disable-infobars')
driver=webdriver.Chrome(chrome_options=options, 
executable_path=r"//usr/local/Caskroom/chromedriver/81.0.4044.69/chromedriver")
driver.get("https://www.nytimes.com/search?dropmab=true&endDate=20120103&query=&sections=Business%7Cnyt%3A%2F%2Fsection%2F0415b2b0-513a-5e78-80da-21ab770cb753&sort=best&startDate=20070101")

WebDriverWait(driver, 40).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='css-vsuiox']//button[@data-testid='search-show-more-button']")))
while True:
    try:
        WebDriverWait(driver, 40).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='css-vsuiox']//button[@data-testid='search-show-more-button']"))).click()
    print("MORE button clicked")
    except TimeoutException:
        break
driver.quit()


headlines_element = browser.find_elements_by_xpath('//h4[@class="css-2fgx4k"]')
headlines = [x.text for x in headlines_element]
print('headlines:')
print(headlines, '\n')

dates_element = browser.find_elements_by_xpath("//time[@class='css-17ubb9w']")
dates = [x.text for x in dates_element]
print("dates:")
print(dates, '\n')

for headlines, dates in zip(headlines, dates):
    print("Headlines : Dates")
    print(headlines + ": " + dates, '\n')

Но когда я запускаю скрипт, кнопка show more нажимает на него несколько раз, а затем случайным образом нажимает на одну из статей и уходит. Я также пытался вложить заголовок и сноску даты в поле While l oop, но только продолжал получать «TabError: непоследовательное использование табуляции и пробелов в отступе»

Пожалуйста, помогите! Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020
wait = WebDriverWait(driver, 10)
driver.get("https://www.nytimes.com/search?dropmab=true&endDate=20120103&query=&sections=Business%7Cnyt%3A%2F%2Fsection%2F0415b2b0-513a-5e78-80da-21ab770cb753&sort=best&startDate=20070101")

times=wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@class='css-46b038']//ol[*]//li//time")))


elements=wait.until(EC.presence_of_all_elements_located((By.XPATH, "//h4")))
for element in elements:
    for time in times:
        print time.text
        print element.text
        break

Выход:

enter image description here

0 голосов
/ 12 апреля 2020

Я чувствую, что вы используете вкладки, которые я рекомендую не использовать.

Вы можете использовать один из следующих вариантов.

Опция 1:

Используйте autopep8 в вашем python коде. просто используйте эту команду. autopep8 -i yourFileName.py

вот документация для autopep8: https://pypi.org/project/autopep8/

Опция 2:

 1. set your IDE to use indentation with 4 spaces
 2. In your existing code please replace all the tabs with 4 spaces
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...