【发布时间】: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