在上述网站上,搜索令牌后,会出现滑块验证码。
我想绕过滑块验证码。我参考了无法让我的脚本向右滑动按钮
中的第一个解决方案我的方法是慢慢移动,直到滑块位于正确的位置,然后打开新页面。
网站是:
https://www.ems.com.cn/english/
我的做法:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
from selenium.webdriver import ActionChains
driver = webdriver.Chrome(ChromeDriverManager().install())
actions = ActionChains(driver)
url = 'https://www.ems.com.cn/english/'
driver.get(url)
token = 'CY008445045CN'
token_space = driver.find_element_by_xpath("//input[@class='el-input__inner']")
token_space.send_keys(token)
driver.find_element_by_xpath("//i[@class='el-icon-search']").click()
time.sleep(4)
slider_container = driver.find_element_by_xpath("//div[@class='slide-verify-slider']")
slider = driver.find_element_by_xpath("//div[@class='slide-verify-slider-mask-item']")
# Perform sliding action
actions.move_to_element(slider).click_and_hold().move_by_offset(slider_container.size['width'], 0).release().perform()
find_element_by_xpath
已弃用,您应该使用:
find_element(By.XPATH, value="")
这是您的代码的更新版本:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
actions = ActionChains(driver)
url = 'https://www.ems.com.cn/english/'
driver.get(url)
token = 'CY008445045CN'
token_space = driver.find_element(By.XPATH, value="//input[@class='el-input__inner']")
token_space.send_keys(token)
driver.find_element(By.XPATH, value="//i[@class='el-icon-search']").click()
time.sleep(8)
slider_container = driver.find_element(By.XPATH,value="//div[@class='slide-verify-slider']")
slider = driver.find_element(By.XPATH, value="//div[@class='slide-verify-slider-mask-item']")
# Perform sliding action
for x in range(10000):
actions.move_to_element(slider).click_and_hold().move_by_offset(x, 0).release().perform()
time.sleep(0.1)
要解决验证码问题,您必须在正确的位置释放按钮,而不仅仅是滑动。
获取数据的更好方法是使用 REST API