硒单击下一步按钮而不是后退按钮

时间:2020-06-18 14:24:35

标签: python selenium selenium-webdriver

尝试抓取此网页的价格,我需要将价格表示为美元,因此我知道它是货币。但是,当我最初加载URL时,它以多种看似随机的货币给出价格。我发现我可以通过单击下一步按钮,然后单击后退按钮来更改此设置,但是当我尝试自动执行此操作时,它不起作用。而是,运行此代码单击两次下一个按钮,而不是单击一次,等待五秒钟,然后单击“后退”按钮。这是我当前正在使用的可复制此问题的代码。

from selenium import webdriver
driver = webdriver.Chrome(r'C:\Users\Hank\Desktop\chromedriver_win32\chromedriver.exe')
driver.get('https://steamcommunity.com/market/listings/440/Unusual%20Old%20Guadalajara')

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import StaleElementReferenceException

import time
time.sleep(5)

action = ActionChains(driver)

next_button=wait(driver, 10).until(EC.element_to_be_clickable((By.ID,'searchResults_btn_next')))
action.move_to_element(next_button).click().perform()
time.sleep(5)
back_button=wait(driver, 10).until(EC.element_to_be_clickable((By.ID,'searchResults_btn_prev')))
action.move_to_element(back_button).click().perform()

非常感谢您的时间和帮助。如果这个问题已经在其他地方得到回答,请直接向我提出一个相关问题。

1 个答案:

答案 0 :(得分:1)

您不需要ActionChains类,它可以通过.click()方法工作。

尝试以下代码:

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
import time

driver = webdriver.Chrome(r'C:\Users\Hank\Desktop\chromedriver_win32\chromedriver.exe')
driver.get('https://steamcommunity.com/market/listings/440/Unusual%20Old%20Guadalajara')

wait = WebDriverWait(driver, 20)

next_button = wait.until(EC.element_to_be_clickable((By.ID,'searchResults_btn_next')))
next_button.click()
time.sleep(5)
back_button = wait.until(EC.element_to_be_clickable((By.ID,'searchResults_btn_prev')))
back_button.click()

但是请注意,time.sleep(5)是不好的方法,您可以使用其他方法,例如:等到第二个页面元素出现。

或者在这种情况下,您可以使用以下代码代替time.sleep(...)

wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'.pagebtn.disabled')))

以上是disable previous button,因为您是在第一次分页着陆时到达的,而在第二次分页到达时便消失了。使用 .invisibility_of_element_located ,它将更有效率。