python - 尝试使用 python 自动完成 Web 表单滑块
问题描述
我是 Python 的初学者,这是我第一次尝试自己想法的完整程序。到目前为止,我试图制作一个使用 Selenium 自动填充网站的程序,现在我已经在表格中达到了需要从滑动比例元素中选择年收入的一点。如何使用 Selenium 或其他模块将元素滑动到预定义的位置(£值)?
例如,最好是介于 20,000 英镑和 30,000 英镑之间的随机值
我试过谷歌搜索,但没有运气。还有其他关于堆栈溢出的类似问题 - 答案有评论说它们不起作用。我已经尝试了一些,但无法让它们自己工作。
以下是我目前正在使用的代码
percent = 50
browser.switch_to_frame(0)
browser.switch_to_active_element()
slidebar = browser.find_element_by_xpath('//*[@id="annualRangeWrap"]/a')
height = slidebar.size['50']
width = slidebar.size['342']
move = ActionChains(driver);
slider = browser.find_element_by_xpath('//*[@id="annualRangeWrap"]/a')
if width > height:
move.click_and_hold(slider).move_by_offset(percent * width / 100, 0).release().perform()
else:
move.click_and_hold(slider).move_by_offset(percent * height / 100, 0).release().perform()
browser.switch_to_default_content()
这是检查元素的代码
<div class="question" id="annualRangeWrap" style="display: block;"><div class="rangeLabel">Annual income</div>
<div class="rangeWrap"><div class="rangeLow">£0</div><div class="rangeNum"><span>Slide to select</span></div>
<div class="rangeHigh">£50,001+</div>
<div class="affRangeSlider ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all">
<div class="ui-slider-range ui-widget-header ui-slider-range-min" style="width: 0%;"></div>
<a class="ui-slider-handle ui-state-default ui-corner-all" href="#" style="left: 0%;"></a></div></div></div>
''<div class="rangeLabel">Annual income</div><div class="rangeWrap"><div class="rangeLow">£0</div><div class="rangeNum">
<span>Slide to select</span></div><div class="rangeHigh">£50,001+</div>
<div class="affRangeSlider ui-slider ui-slider-horizontal ui-widget ui-widget-content ui-corner-all">
<div class="ui-slider-range ui-widget-header ui-slider-range-min" style="width: 0%;"></div>
<a class="ui-slider-handle ui-state-default ui-corner-all" href="#" style="left: 0%;"></a></div></div>'
我尝试过使用 ID、类、Xpath。我无法弄清楚我哪里出错了
这通常是我在回溯时得到的。我试过在组合中使用不同的元素,但它总是“找不到'xxxxx'”
File "C:\Users\John\Desktop\New folder (2)\VeryAutoForm.py", line 138, in <module>
slidebar = browser.find_element_by_xpath('//*[@id="annualRangeWrap"]/a')
File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Program Files\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="annualRangeWrap"]/a"}
解决方案
好的,我找到了解决方案。可能对任何了解 CSS 但我仍然是新手的人来说是显而易见的。对我有用的代码非常简单。当然更改 css 选择器以匹配您自己的。我为我的解决方案添加了百分比,您的解决方案可能会有所不同
from selenium.webdriver.common.action_chains import ActionChains
percent = random.randint(150, 340)
slider = browser.find_element_by_css_selector("#totalRangeWrap > div:nth-child(2) > div:nth-child(4) > a:nth-child(2)")
move = ActionChains(browser)
move.click_and_hold(slider).move_by_offset(percent, 0).release().perform()
推荐阅读
- kubernetes - 为什么 Kubernetes 的 statefulset 不能均匀地运行 3 个 pod?
- c++ - 如何创建一个基于其输入创建不同数量变量的结构
- google-apps-script - 无法打开 Google xlsx 电子表格/Google Drive 权限也被阻止
- sql-server - 如何释放 SQL Server 中用于解析 XML 字段的内存
- reactjs - $r 在 React 开发工具中
- angular - 使用angular提交表单时如何通过HTTP post请求保存令牌本地存储
- api - 如何在 Vuejs 的上下文中使用 API 获取图表数据
- terraform - 调用函数“文件”失败:不存在文件 - Terraform
- vue.js - Quasar - 从 .env 获取 API 密钥到引导文件中
- python - 如何修复我的代码以使用 Python 3.7 插入 SQL Server