我的任务是编写一个解析器以单击网站上的一个按钮,但我只能单击其中一个按钮而遇到问题。以下代码适用于除一个按钮之外的所有按钮。
这是html:http: //pastebin.com/6dLF5ru8
这是源html:http: //pastebin.com/XhsedGLb
python代码:
driver = webdriver.Firefox() ... el = driver.find_element_by_id("-spel-nba") actions.move_to_element(el) actions.sleep(.1) actions.click() actions.perform()
我收到此错误。
ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
根据赛富尔,我刚刚尝试等待相同的元素不可见异常:
wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.XPATH, "//input[contains(@id,'spsel')][@value='nba']"))).click()
如果你看一下页面的源代码,你会明白,几乎所有的SELECT,DIV都是元素faked和从JavaScript创建的,这就是为什么webdriver的不能 查阅 它们。
SELECT
DIV
faked
但是,有一种解决方法,方法是使用ActionChains打开您的开发人员控制台,然后在所需元素上注入 人工 CLICK,实际上是 Label 触发了 NBA 数据加载…这是一个工作示例:
ActionChains
from selenium import webdriver from selenium.webdriver.common import action_chains, keys import time driver = webdriver.Firefox() driver.get('Your URL here...') assert 'NBA' in driver.page_source action = action_chains.ActionChains(driver) # open up the developer console, mine on MAC, yours may be diff key combo action.send_keys(keys.Keys.COMMAND+keys.Keys.ALT+'i') action.perform() time.sleep(3) # this below ENTER is to rid of the above "i" action.send_keys(keys.Keys.ENTER) # inject the JavaScript... action.send_keys("document.querySelectorAll('label.boxed')[1].click()"+keys.Keys.ENTER) action.perform()
另外,要替换所有ActionChains命令,您可以execute_script像这样简单地运行:
execute_script
driver.execute_script("document.querySelectorAll('label.boxed')[1].click()")
无论如何,至少您可以在我的本地文件上找到所需的地方…希望对您有所帮助!