尝试抓取此网页的价格,我需要将价格表示为美元,因此我知道它是货币。但是,当我最初加载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()
非常感谢您的时间和帮助。如果这个问题已经在其他地方得到回答,请直接向我提出一个相关问题。
答案 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
,它将更有效率。