【问题标题】:Webpage doesn't refresh after input输入后网页不刷新
【发布时间】:2019-09-10 21:35:44
【问题描述】:

目前我正在使用 selenium python 自动化网站。我有这个问题,当我手动输入J590 到目标textbox 时,我将不得不单击网站上的任意位置或按下选项卡,这将刷新网站,并且下拉框中将提供一个选项。但是,selenium 似乎并没有为我刷新页面。

我尝试在将J590 发送到textbox 之前和之后使用click(),我也尝试在发送J590 之后使用send_keys(Keys.TAB),但没有一个有效。

这是我用来发送inputs的代码

driver.execute_script("document.getElementById('CustCd').value+="+ dumps(jcode))

这是我发送input后尝试的代码

driver.find_element_by_xpath('//*[@id="Item"]/form/center/input[2]').click()
or
driver.find_element_by_xpath('//*[@id="CustCd"]').send_keys(Keys.TAB)

我可以知道为什么硒会这样吗?有解决办法吗?

【问题讨论】:

  • 这很难说,但你确定你没有点击同一个输入元素,你不需要点击不同的元素来触发刷新吗?
  • @MadisonCourto 啊,是的,我点击了一个不同的元素。我忘记更改 xpath。
  • 现在可以用了吗?
  • 不知道为什么你使用js来输入值而不是使用send_keys。我怀疑当您使用 js 时与元素关联的键盘事件不会触发。如果 js 是设置值的唯一选项,那么您必须调度相应的事件来触发更改。请参阅this 回答以了解元素的关联事件。
  • @MadisonCourto 不,它不工作

标签: javascript python selenium


【解决方案1】:

当您使用 js 输入数据时,当您在页面中退出或单击页面中的另一个元素时,似乎会触发键盘/onchange 事件。所以,你必须dispatch(模拟)相应的事件。

请参阅this 帖子以了解与元素相关的事件。

假设你想在一个元素上触发 onchange 事件,那么你应该先获取该元素。

ele = driver.find_element_by_xxxx(yyy)

然后使用js发送事件到元素,如下图。

driver.executeScript("arguments[0].dispatchEvent(new Event('change', {'bubbles': true,'cancelable': true}));",ele)

确保您返回了正确的元素。并相应地更改事件名称。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2020-10-06
    • 2014-12-11
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多