您现在的位置是:首页 > 编程语言学习 > 前端编程语言 > 文章正文 前端编程语言

Python+Selenium实现网站滑块拖动操作

2022-09-06 09:58:12 前端编程语言

简介实现效果示例代码importtimefromseleniumimportwebdriverfromselenium.webdriverimportActionChainsfromselenium.webdriver.chrome.service...

实现效果

示例代码

  1. import time 
  2. from selenium import webdriver 
  3. from selenium.webdriver import ActionChains 
  4. from selenium.webdriver.chrome.service import Service 
  5. from selenium.webdriver.common.by import By 
  6.  
  7.  
  8. service = Service(r"D:\software\chromedriver.exe"
  9. driver = webdriver.Chrome(service=service) 
  10. # 控制浏览器访问url地址 
  11. driver.get("https://www.taobao.com/"
  12. # 隐式等待 
  13. driver.implicitly_wait(1) 
  14. account = 'account'  # 账号 
  15. password = 'abc123'  # 密码 
  16. # 找到“登录”位置 
  17. driver.find_element(by=By.CSS_SELECTOR, value="div.member-ft > div > a.btn-login").click() 
  18. driver.maximize_window() 
  19. driver.implicitly_wait(1) 
  20.  
  21. # 切换页面 获取当前页面handle 获取所有页面的handle 列表的后面 
  22. driver.switch_to.window(driver.window_handles[1]) 
  23.  
  24. # 找到“账号名”输入框 
  25. el_account = driver.find_element(by=By.CSS_SELECTOR, value='#fm-login-id'
  26. print(el_account.text) 
  27. driver.implicitly_wait(1) 
  28. # 点击账号输入框 
  29. el_account.click() 
  30. # 输入账号 
  31. el_account.send_keys(account) 
  32. driver.implicitly_wait(1) 
  33.  
  34. # 找到“密码”输入框 
  35. el_password = driver.find_element(by=By.XPATH, value='//*[@id="fm-login-password"]'
  36. # print(el_password.text) 
  37. # print(el_password.location) 
  38. # 点击密码输入框 
  39. el_password.click() 
  40. # 输入密码 
  41. el_password.send_keys(password) 
  42. driver.implicitly_wait(2) 
  43.  
  44. # 找到“登录”按钮,并点击 
  45. el_login_btn = driver.find_element(by=By.XPATH, value='//*[@id="login-form"]/div[4]/button'
  46. el_login_btn.click() 
  47. # print(el_login_btn.location) 
  48. driver.implicitly_wait(1) 
  49.  
  50. # 切换frame 
  51. driver.switch_to.frame('baxia-dialog-content'
  52. # 找到滑块,获取宽高 
  53. el1 = driver.find_element(by=By.XPATH, value='//*[@id="nc_1_n1z"]'
  54. print(el1.size['width']) 
  55. print(el1.size['height']) 
  56.  
  57. # 找到拖动区域,获得宽高 
  58. el2 = driver.find_element(by=By.XPATH, value='//*[@id="nc_1__scale_text"]'
  59. print(el2.size['width']) 
  60. print(el2.size['height']) 
  61. driver.implicitly_wait(2) 
  62. # 创建一个事件链对象 
  63. chains = ActionChains(driver) 
  64. # 实现滑块拖动 
  65. chains.drag_and_drop_by_offset(el1, el2.size['width'], -el2.size['height']) 
  66. # 事件提交 
  67. chains.perform() 
  68.  
  69. time.sleep(5) 
  70. # 关闭浏览器 
  71. driver.close() 
  72. driver.quit() 

方法补充

在做登录测试时,有些站点会有“滑块”验证功能,自动化测试可用对滑块拖拉操作的方式处理:

需求:携程注册“滑块”操作

思路:

按住左边滑块

拖放到最右边

用键盘事件中:drag_and_drop_by_offset

代码为:

  1. from selenium import webdriver 
  2. import time 
  3. from selenium.webdriver.common.keys import Keys 
  4. from selenium.webdriver.common.action_chains import ActionChains 
  5.   
  6. driver = webdriver.Chrome() 
  7. driver.get("https://passport.ctrip.com/user/reg/home"
  8. driver.find_element_by_css_selector("#agr_pop > div.pop_footer > a.reg_btn.reg_agree").click() 
  9.   
  10. sour = driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-drop-btn"
  11. print(sour.size['width']) 
  12. print(sour.size['height']) 
  13.   
  14. ele =driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-bg-bar"
  15. print(ele.size['width']) 
  16. print(ele.size['height']) 
  17. time.sleep(2) 
  18. ActionChains(driver).drag_and_drop_by_offset(sour,ele.size["width"],-ele.size["height"]).perform() 

 

相关文章

站点信息