为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2022-05-24 13:23:14
我正在尝试单击网页上的“显示更多”按钮。我写了这段代码,但在代码下方出现错误。from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWait#Open Chromedriver=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_sourcesoup=BeautifulSoup(html,"html.parser")time.sleep(5)WebDriverWait(driver, 5)#click show moreshow_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 ...),但我认为如果我包含该行但仍然相同,它会起作用。任何帮助,将不胜感激。一个额外的问题是,有没有办法多次点击“显示更多”按钮?因为我注意到我必须多次单击才能查找所有酒店列表。
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

我会简单地使用下面的CSS。


button[data-stid='show-more-results']

脚本:


# scroll to the element before clicking

driver.find_element_by_css_selector("button[data-stid='show-more-results']").location_once_scrolled_into_view

# click on the show more button

driver.find_element_by_css_selector("button[data-stid='show-more-results']").click()

截屏:

//img1.sycdn.imooc.com//628c6bde0001ed9915670467.jpg

查看完整回答
反对 回复 2022-05-24
?
Helenr

TA贡献1780条经验 获得超4个赞

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



查看完整回答
反对 回复 2022-05-24
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

在视口中滚动后,您需要多次单击带有文本的按钮Show More并实现此目的,您可以使用以下定位器策略:


代码块:


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


chrome_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")

        break

driver.quit()

控制台输出:


Show More button clicked

Show More button clicked

Show More button clicked

.

No more Show More button


查看完整回答
反对 回复 2022-05-24
  • 3 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信