猿问

如何点击延迟加载网页上的“显示更多”按钮

我正在尝试单击网页上的“显示更多”按钮。我写了这段代码,但在代码下方出现错误。


from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait


#Open Chrome

driver=webdriver.Chrome(executable_path="C:/Users/chromedriver.exe")


web="https://www.expedia.com/Hotel-Search?adults=1&destination=Montreal%2C%20Quebec%2C%20Canada&endDate=2019-09-16&latLong=45.50195%2C-73.56714&localDateFormat=M%2Fd%2Fyyyy&regionId=178288&sort=recommended&startDate=2019-09-15&useRewards=true"

driver.get(web)

driver.maximize_window()


#parse html        

html =driver.page_source

soup=BeautifulSoup(html,"html.parser")

time.sleep(5)

WebDriverWait(driver, 5)


#click show more

show_more=driver.find_element_by_link_text('Show More')

#Another element is covering the element you are to click.    

driver.execute_script("arguments[0].click();", show_more)


错误:


NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"Show More"}

起初,我没有包含最后一行(execute_script ...),但我认为如果我包含该行但仍然相同,它会起作用。


任何帮助,将不胜感激。


一个额外的问题是,有没有办法多次点击“显示更多”按钮?因为我注意到我必须多次单击才能查找所有酒店列表。


慕田峪9158850
浏览 181回答 3
3回答

慕丝7291255

我会简单地使用下面的CSS。button[data-stid='show-more-results']脚本:# scroll to the element before clickingdriver.find_element_by_css_selector("button[data-stid='show-more-results']").location_once_scrolled_into_view# click on the show more buttondriver.find_element_by_css_selector("button[data-stid='show-more-results']").click()截屏:

Helenr

试试: driver.findElement(By.xpath("//span[contains(text(),'Show More')]")).click()

牧羊人nacy

在视口中滚动后,您需要多次单击带有文本的按钮Show More并实现此目的,您可以使用以下定位器策略:代码块:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECchrome_options = webdriver.ChromeOptions()chrome_options.add_argument("start-maximized")chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])chrome_options.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(options=chrome_options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')driver.get("https://www.expedia.com/Hotel-Search?adults=1&destination=Montreal%2C%20Quebec%2C%20Canada&endDate=2019-09-16&latLong=45.50195%2C-73.56714&localDateFormat=M%2Fd%2Fyyyy&regionId=178288&sort=recommended&startDate=2019-09-15&useRewards=true")while True:    try:        driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Show More']"))))        driver.execute_script("arguments[0].click();", WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Show More']"))))        print("Show More button clicked")    except:        print("No more Show More button")        breakdriver.quit()控制台输出:Show More button clickedShow More button clickedShow More button clicked.No more Show More button
随时随地看视频慕课网APP

相关分类

Python
我要回答