我正在try 从网页(https://www.educacion.gob.es/teseo/irGestionarConsulta.do)获取数据.它在条目处有一个验证码,我手动求解并将其移动到结果页面.
如果我使用"返回"按钮of the browser到达初始页面,则会发生从结果页面返回到条目页面does not modify the captcha的情况;但如果我使用Selify的WebDriver的driver.back()
指令,有时验证码会被修改--这是我最好避免的.
显然:我希望从Selify访问DOM window (the browser),而不是访问文档(或html中的任何元素),并将Alt+Arrow_Left键发送到浏览器(窗口).
显然,这不能用以下方式来完成:
from selenium.webdriver import Firefox
from selenium.webdriver.common.keys import Keys
driver = Firefox()
driver.get(url)
xpath = ???
driver.find_element_by_xpath(xpath).send_keys(Keys.ALT, Keys.ARROW_LEFT)
因为send_keys
连接到焦点上的元素,而我的目标是DOM窗口,而不是文档的任何特定元素.
我也try 过ActionChains
:
from selenium.webdriver.common.action_chains import ActionChains
action = ActionChains(driver)
action.key_down(Keys.LEFT_ALT).key_down(Keys.ARROW_LEFT).send_keys().key_up(Keys.LEFT_ALT).key_up(Keys.ARROW_LEFT)
action.perform()
这也不起作用(我已经try 了几种组合).文档指出,key_down/up
需要一个元素来发送键,如果没有键(默认设置),则该元素是当前关注的元素.因此,这里同样存在如何专注于窗口(浏览器)的问题.
我考虑过使用鼠标控件,但我假设它将是相同的:我知道如何使鼠标到达文档中的任何元素,但我想到达窗口/浏览器.
我曾想过通过driver.current_window_handle
来确定目标元素,但也徒劳无功.
selenium能做到这一点吗?如果是这样的话,是如何做到的呢?其他图书馆可以做到这一点吗,也许是吹笛人或剧作家?