Selenium: как мне нажать кнопку «показать», почистить фрагменты, затем снова нажать кнопку «показать»? - PullRequest
0 голосов
/ 15 апреля 2020

Ссылка на страницу, которую я пытаюсь почистить:

https://www.nytimes.com/reviews/dining

Поскольку на этой странице есть кнопка «показать больше», мне понадобился Selenium для автоматического итеративно нажимайте кнопку «показать больше», а затем каким-то образом используйте «Красивый суп» для сбора ссылок на каждый отдельный обзор ресторана на странице. На фотографии ниже ссылка, которую я хочу получить, находится в пределах https://...onigiri.html ">.

enter image description here

Код на данный момент:

url = "https://www.nytimes.com/reviews/dining"
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
driver.get(url)

for i in range(1):
  button = driver.find_element_by_tag_name("button")
  button.click()

Как использовать WebDriverWait и BeautifulSoup [BeautifulSoup (driver.page_source, 'html .parser')] для выполнения этой задачи?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Go до https://www.nytimes.com/reviews/dining нажмите F12 и затем нажмите Ctrl + Shift + C, чтобы получить элемент Показать больше , тогда, как я показал на рисунке, получите свой xpath элемента :

enter image description here

Чтобы найти xpath, посмотрите:

https://www.techbeamers.com/locate-elements-selenium-python/#locate -element-by-xpath

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def executeTest():
    global driver
    driver.get('https://www.nytimes.com/reviews/dining')
    time.sleep(7)
    element = driver.find_element_by_xpath('Your_Xpath')
    element.click()
    time.sleep(3)

def startWebDriver():
    global driver
    options = Options()
    options.add_argument("--disable-infobars")
    driver = webdriver.Chrome(chrome_options=options)

if __name__ == "__main__":
    startWebDriver()
    executeTest()
    driver.quit()
0 голосов
/ 16 апреля 2020

Это приложение с отложенной загрузкой. Чтобы нажать кнопку Show More, необходимо использовать infinite l oop и scroll down страницу для поиска, а затем click и подождать некоторое время для загрузки. страницы, а затем сохраните значение в list. Проверьте список до и после, если он совпадает, затем оторвитесь от бесконечного l oop.

Код :

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
import time

driver=webdriver.Chrome()
driver.get("https://www.nytimes.com/reviews/dining")
#To accept the coockie click on that
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//button[text()='Accept']"))).click()
listhref=[]

while(True):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    elements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"a.css-gg4vpm")))
    lenlistbefore=len(listhref)
    for ele in elements:
        if ele.get_attribute("href") in listhref:
            continue
        else:
            listhref.append(ele.get_attribute("href"))

    lenlistafter = len(listhref)

    if lenlistbefore==lenlistafter:
        break

    button=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//button[text()='Show More']")))
    driver.execute_script("arguments[0].click();", button)
    time.sleep(2)
print(len(listhref))
print(listhref)

Примечание : - Я получаю список подсчета 499

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...