如何在 python 中查找执行 javascript 的变量 html 元素

How to find a varible html element executing javascript in python

我正在尝试使用 2Captcha 服务来解决 h 验证码 V2。

像这样工作:

  1. 你得到一个值来解决验证码
  2. 然后您在 HTML 代码中找到一个 textarea 元素来插入该值(这是我的问题)
  3. 您在该元素中插入值
  4. 您按下提交按钮,验证码已解决

首先我将展示一个工作示例,然后我将展示我遇到问题的地方。

这是 HTML 查找并插入获取值的代码:

textarea id="h-captcha-response" name="h-captcha-response" style="display: none;"></textarea>

这是用于插入值的 python 代码:

value = get_value()
insert_solution = 'document.getElementById("h-captcha-response").innerHTML="' + value + '";'
driver.execute_script(insert_solution)

这正是让你远离这个:

这是结果:

最后你按下提交按钮就完成了。这个例子有效

这是我的问题: 在我的例子中,HTML 文档有一个可变 ID,如下所示:

<textarea id="h-captcha-response-0tesbrpxsk8" name="h-captcha-response" style="display: none;"></textarea>

请注意,id 有一个字母数字部分 (0tesbrpxsk8),它总是在变化,这使得 select。

我试图找到一些在 document.getElementById() 中使用的正则表达式 没有成功

我也试过用:

document.getElementByTagName("textarea").innerHTML=".....

我被困在这里并尝试了其他方法但没有成功,因为我可能因为我没有很好地实施这些解决方案或者它们根本不起作用。

我会感谢一些见解,谢谢

试试这个:

const textarea = document.querySelector('[id^="h-captcha-response-"]')
textarea.value = "This is inside the textarea!"
<textarea id="h-captcha-response-0tesbrpxsk8" name="h-captcha-response"></textarea>

  • 首先:您使用 textarea.value = "some value"
  • 设置文本区域的值
  • 您应该使用 document.querySelector() 到 select 个元素。 (你有更多的能力)
  • 您可以 select id 开头,使用此查询:[id^="start"]

这将填写所有这些 (recaptcha / hcaptcha):

driver.execute_script('''
  let [captcha] = arguments
  [...document.querySelectorAll('[name="h-captcha-response"],[name="g-recaptcha-response"]')].map(el => {
    el.innerHTML = captcha
  })
''', value)