【问题标题】:Python - Write to HTML input element through javascriptPython - 通过 javascript 写入 HTML 输入元素
【发布时间】:2020-09-20 15:01:48
【问题描述】:

目标

我正在做一个私人项目,用 Python3 编写并使用 Selenium 将本地数据库中的信息写入网站 HTML 文件的输入元素中。

更明确地说:我想给网站 roll20 (https://roll20.org) 上的 dnd-character-sheet-html 写信。

问题

遗憾的是,由于 selenium 使用的 firefox 和 chrome 驱动程序中的 known bugg,selenium 包的“send_keys()”方法经常丢弃字符。因此我想直接使用javascript编写。我设法写入了一些元素,但是,当我单击 HTML 上的任意位置时,所有输入的值都会消失。

当前的解决方案尝试

目前我通过它的 xpath 识别我想要写入的元素,然后设置它的“值”属性。下面是一些示例代码:

import selenium


class DemoClass:
    def __init__(self, driver):
        self.driver = driver
        self.known_element_xpaths = ['Some/Xpath1', 'Some/Xpath2', 'Some/Xpath3'] 

    def write_all_elements(self, input_string):
        for element_xpath in self.known_element_xpaths:
            self.write_to_element(element_xpath, input_string)

    def write_to_element(self, element_xpath, input_string):
        js_command = f'document.evaluate(\'{element_xpath}\', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value = \'{input_string}\';'
        self.driver.execute_script(js_command)

driver = selenium.webdriver.chrome()
page = DemoClass(driver)
page.write_all_elements('Test')

我对 javascript 了解得不够多,无法理解为什么值会不断消失。我的最后一次搜索显示,这可能是关于表单 (?) 在单击后使用其默认值更新,导致 HTML (?) 重置。

无论哪种方式,在我看来,我应该在 javascript 中使用不同的方式来写入这些元素。这里的正确做法是什么?

任何帮助或指出正确的解决方案将不胜感激,我在这里有点超出我的深度。

附加资源

如果有帮助,这里也是我尝试写入元素的部分的屏幕截图,以及我尝试写入的确切元素的更特写屏幕截图。 此外,这里还有一个example HTML(包括相关资源),但请注意,只有在写入并单击字符表在线时,文本才会消失。



【问题讨论】:

  • 你是说 roll20.net 吗?

标签: javascript python html python-3.x


【解决方案1】:

你可以试试设置

driver.implicitly_wait(10)

在声明驱动程序时或在类构造函数中

self.driver = driver
self.driver.implicitly_wait(10)

解释here


如果您想避免使用 JS(因为使用 selenium 和 python 很难调试 - 已经存在),您可以在 selenium-not-setting-input-field-value 上查看这篇文章。 请注意在发送密钥之前使用的 .clear() 方法。

你提到的关于驱动错误的帖子也有这个answer,你试过吗?

您是否尝试过并在发送密钥后按 Enter(以编程方式或手动方式)。也许该网站需要某种字段验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2013-11-19
    相关资源
    最近更新 更多