- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个脚本可以打开 eBay 并自动化购买过程,并且它可以工作......一段时间。经过一系列循环后,它随机开始跳过向文本字段发送数据。该脚本第一次总是会完美运行,但在第二次或第十次迭代之间偶尔会崩溃;到目前为止,它还没有超过第 10 个循环。
我使用的是 Python 2.7、Chrome 47(带有 chrome 驱动程序)和 Selenium 2.53.5。
这是我的代码的一部分:
for o in orders:
if (o[1] == "Batteries"):
driver.get("http://www.ebay.com/itm/20-Piece-Combo-Pack-Duracell-Duralock-10-AA-and-10-AAA-Size-Batteries-EXP-2025/272003416650?_trksid=p2045573.c100505.m3226&_trkparms=aid%3D555014%26algo%3DPL.DEFAULT%26ao%3D1%26asc%3D36866%26meid%3D1ff8810857444e0aa548e1aecb205110%26pid%3D100505%26rk%3D1%26rkt%3D1%26")
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'qtyInput')))
input_field = driver.find_element_by_name('quantity')
input_field.clear()
input_field.send_keys(o[0])
driver.find_element_by_id('binBtn_btn').click()
#GUESTCHECKOUT
wait.until(EC.presence_of_element_located((By.ID, 'gtChk')))
driver.find_element_by_id('gtChk').click()
driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
wait.until(EC.presence_of_element_located((By.ID, 'confirmEmail')))
t = list(pycountry.countries)
for country in t:
if(o[7] == country.alpha2):
o[7] = country.name
Select(driver.find_element_by_name('country')).select_by_visible_text(o[7])
driver.find_element_by_name('firstName').send_keys(name[0])
driver.find_element_by_name('lastName').send_keys(o[2])
driver.find_element_by_name('address1').send_keys(o[3])
driver.find_element_by_name('city').send_keys(o[4])
Select(driver.find_element_by_name('state')).select_by_value(o[6])
driver.find_element_by_name('zip').send_keys(o[5])
driver.find_element_by_name('dayphone1').send_keys("123")
driver.find_element_by_name('dayphone2').send_keys("456")
driver.find_element_by_name('dayphone3').send_keys("7890")
driver.find_element_by_name('email').send_keys("d@gmail.com")
driver.find_element_by_name('confirmEmail').send_keys("d@gmail.com")
Traceback (most recent call last): File "autoBuyer.py", line 267, in driver.find_element_by_name('lastName').send_keys(name[1]) File "/Library/Python/2.7/site-packages/selenium-2.53.5-
py2.7.egg/selenium/webdriver/remote/webelement.py", line 321, in send_keys self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value':
keys_to_typing(value)}) File "/Library/Python/2.7/site-packages/selenium-2.53.5-
py2.7.egg/selenium/webdriver/remote/webelement.py", line 456, in _execute return self._parent.execute(command, params) File "/Library/Python/2.7/site-packages/selenium-2.53.5- py2.7.egg/selenium/webdriver/remote/webdriver.py", line 236, in execute self.error_handler.check_response(response) File "/Library/Python/2.7/site-packages/selenium-2.53.5- py2.7.egg/selenium/webdriver/remote/errorhandler.py", line 194, in
check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document (Session info: chrome=51.0.2704.106) (Driver info: chromedriver=2.22.397929
(fb72fb249a903a0b1041ea71eb4c8b3fa0d9be5a),platform=Mac OS X 10.11.5 x86_64)
最佳答案
StaleElementReferenceException
通常指示您与元素交互时刷新的 DOM。我经常在高度动态的网页上看到它们。
如果与 driver.find_element_by_name('dayphone1').send_keys("123")
类似的调用似乎最常引发异常,我将创建一个函数来处理该特定类型的调用,然后用任何 @retry
包对其进行修饰。
我无法运行您编写的代码,但以下是我将进行的更改的演示:(一定要先pip install retry
)
from retry import retry
from selenium.common.exceptions import StaleElementReferenceException
@retry(StaleElementReferenceException, tries=3)
def find_by_name_send_keys(driver, name_str, keys, clear=False):
elem = driver.find_element_by_name(name_str)
if clear:
elem.clear()
elem.send_keys(keys)
for o in orders:
if (o[1] == "Batteries"):
driver.get("http://www.ebay.com/itm/20-Piece-Combo-Pack-Duracell-Duralock-10-AA-and-10-AAA-Size-Batteries-EXP-2025/272003416650?_trksid=p2045573.c100505.m3226&_trkparms=aid%3D555014%26algo%3DPL.DEFAULT%26ao%3D1%26asc%3D36866%26meid%3D1ff8810857444e0aa548e1aecb205110%26pid%3D100505%26rk%3D1%26rkt%3D1%26")
wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'qtyInput')))
find_by_name_send_keys(driver, 'quantity', o[0], clear=True)
driver.find_element_by_id('binBtn_btn').click()
#GUESTCHECKOUT
wait.until(EC.presence_of_element_located((By.ID, 'gtChk')))
driver.find_element_by_id('gtChk').click()
driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
wait.until(EC.presence_of_element_located((By.ID, 'confirmEmail')))
t = list(pycountry.countries)
for country in t:
if(o[7] == country.alpha2):
o[7] = country.name
Select(driver.find_element_by_name('country')).select_by_visible_text(o[7])
find_by_name_send_keys(driver, 'firstName', name[0])
find_by_name_send_keys(driver, 'lastName', o[2])
find_by_name_send_keys(driver, 'address1', o[3])
find_by_name_send_keys(driver, 'city', o[4])
Select(driver.find_element_by_name('state')).select_by_value(o[6])
find_by_name_send_keys(driver, 'zip', o[5])
find_by_name_send_keys(driver, 'dayphone1', "123")
find_by_name_send_keys(driver, 'dayphone2', "456")
find_by_name_send_keys(driver, 'dayphone3', "7890")
find_by_name_send_keys(driver, 'email', "d@gmail.com")
find_by_name_send_keys(driver, 'confirmEmail', "d@gmail.com")
关于python selenium 'send_keys' 运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132600/
我正在尝试构建一个函数来清除字段和 send_keys,但出现错误。看我的代码: base.py class Page(object): def clear_sendkeys(self, *l
我想将文本发送到页面的文本框。 这是页面上的隐藏元素: Topics 我可以点击文本框但无法发送文本的代码: textbox = [tag for tag in driver.find_elemen
我正在编写一个用于填写表格的脚本。它将具有特定值的字符串发送到应输入该值的文本字段。然而,虽然文本字段总是被输入,但字符有时会变得困惑。例如,在一个字段中,要输入的值为: 42042042042042
我正在使用带有 chromedriver 的 Python Selenium 进行自动化测试。 下面是代码示例: inputElement.send_keys(2356785)
我正在自动化一个在线应用程序,并试图让每个“.send_keys()”更加真实。 id 不是立即用“name@email.com”猛击文本字段,而是在击键之间有一个小的延迟,这样看起来就像是人在打字而
我想从 Selenium 切换到 Poltergeist,但我需要模拟一个条形码扫描仪,看起来像键盘输入 标签。我将此代码与 Selenium 一起使用: native.send_keys(send_
我有一个脚本可以打开 eBay 并自动化购买过程,并且它可以工作......一段时间。经过一系列循环后,它随机开始跳过向文本字段发送数据。该脚本第一次总是会完美运行,但在第二次或第十次迭代之间偶尔会崩
我正在自动化一个在线应用程序,并试图让每个“.send_keys()”更加真实。 id 不是立即用“name@email.com”猛击文本字段,而是在击键之间有一个小的延迟,这样看起来就像是人在打字而
在Selenium中我想输入一个测试字符串“hello'world”,但是网页的文本框变成了“helloworld”。就好像撇号不存在一样。将 "'" 替换为 chr(39) 或拆分字符串也不起作用。
我是自动化领域的新手。我正在尝试在 Omegle 的文本框中输入一个字符串并按 Enter 键,但它显示了一个错误: selenium.common.exceptions.ElementNotInte
我正在尝试在Python中使用Selenium,因为我是这样做的初学者,所以我无法让send_key工作,但很可能它是直接的,我错过了一些东西。 这是我迄今为止所做的示例: from selenium
我尝试将价格填充到输入元素中。我尝试了很多方法但都失败了,我意识到它可能被另一个元素覆盖了。当我将鼠标指向该字段时,它会自动显示工具提示。而且我还看到检查框中出现了一些 HTML 代码行。 图 1:当
当我用 PhantomJS 和 selenium 运行我的代码时,res 显示 act,但是在 send_keys 中代码不会继续,只是停留在,没有错,没有任何答案,也没有停留。我只想知道为什么. r
这个问题已经有答案了: Stale element exception python (2 个回答) Selenium clicks one time, but next click returns
我正在使用selenium来抓取twitter(不使用api只是练习selenium),当它进入以下页面时需要登录,我使用以下代码来找到登录输入字段,然后发送用户名和密码字符串: from selen
问题 我正在尝试通过键入页码并单击回车来使用 selenium 更改数据库的页面(ReferenceUSA,需要付费或大学证书),但要注意的是搜索框位于 div 标记中。 send_keys() 仅适
我的问题:我有一个填充字段的方法,但问题是 selenium 没有将完整的字符串发送到该字段,所以我的断言在验证时失败了。 我的代码: var webdriver = require('seleniu
我正在尝试使用 selenium 的 send_keys 将表情符号字符发送到具有以下 python 代码的文本框。 browser = webdriver.Chrome(chrome_options
我知道如何用下一个代码慢慢打字: elem = driver.find_element_by_id("mainCommentForm") text = "To type text here" for
我正在尝试将_keys 发送到 webelement 但每次我都会收到此错误 driver.send_keys("admin") AttributeError: 'WebDriver' object
我是一名优秀的程序员,十分优秀!