【问题标题】:Selenium in Python - Running JavaScriptPython 中的 Selenium - 运行 JavaScript
【发布时间】:2018-05-25 05:58:39
【问题描述】:

我正在尝试抓取一个主要由 javascript 运行的网站,这让我非常头疼,因为我不懂 javascript。

这是我目前所拥有的:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.keys import Keys

binary = FirefoxBinary(r'C:\Users\kwright\AppData\Local\Mozilla Firefox\firefox.exe')

driver = webdriver.Firefox(firefox_binary=binary)
driver.get('http://www.papowerswitch.com/shop-for-electricity/shop-for-your-home')
#zipcode = driver.find_element_by_id('edit-zipcode')
monthlyuse = driver.find_element_by_name('estimated-monthly-usage')
button = driver.find_element_by_id("edit-submit-residential-rate-search2")
driver.execute_script("document.getElementById('edit-zipcode').value='18707'")

这很好用,它为我提供了邮政编码部分所需的价值。下一部分我遇到了麻烦,因为 Id 名称不是唯一的,但是名称标签是,我的问题是我不知道通过名称标签获取元素并输入我需要的数据的 javascript 函数.

我尝试了这个和这个的几个变体,但没有成功。

driver.execute_script("driver.findElement(webdriver.By.name('estimated-monthly-usage')).value='1000'")

谁能在这里帮助我,让我知道我需要添加什么脚本才能填写表格的这一部分?谢谢你。

编辑: 这是HTML 每月使用量

【问题讨论】:

  • 如果显示 html 可能会有所帮助,但是为什么不使用 javascript,仅使用 Webdriver 和 Python 就找不到元素?
  • 在python中返回错误,python中的selenium驱动不会发送密钥,你必须通过javascript来完成。

标签: javascript python selenium web-scraping


【解决方案1】:

driver.findElementSelenium 语法,而在 driver.execute_script 内部你需要 JavaScript 语法:

driver.execute_script("some javascript code comes here");

要找到正确的功能,请查看document DOM object:就像您之前使用的document.getElementById,它具有document.getElementsByName() 功能。请注意,与只能返回 1 个元素的 ID 不同,可以有许多具有相同名称的元素,因此函数将它们全部作为数组返回。所以你的陈述变成:

driver.execute_script("document.getElementsByName('estimated-monthly-usage')[0].value='1000'");

【讨论】:

  • 效果很好!谢谢。
猜你喜欢
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多