【问题标题】:Call a Javascript function in Python - Selenium在 Python 中调用 Javascript 函数 - Selenium
【发布时间】:2013-04-24 10:12:39
【问题描述】:

我有这个 HTML 代码,我正在使用 python 脚本处理/报废:

<a href="javascript:VerMapa('AVDA. DE AMERICA, 2  -33880 POLA DE ALLANDE','RODRIGUEZ-PELAEZ PEÑA, ANA MARIA','AVDA. DE AMERICA, 2  -33880','33880','ALLANDE','183','178')"><img src="../../Fijos/Img/VerMapa.jpg" alt="" width="25" height="24" border="0">&nbsp;<br>Ver Mapa</a>

这是函数的定义:

function VerMapa(direccion,farmacia,domicilio,CP,municipio, numeroOficina,identidad) {
    window.open("googleMaps.aspDir="+direccion+"&Far="+farmacia+"&Dom="+domicilio+"&CP="+CP+"&Mun="+municipio+"&NO="+numeroOficina+"&Id="+identidad+"&",'Lista','toolbar=no, menubar=no, scrollbars=yes,resizable=yes,status=yes,screenX=50,top=50,width=740,height=530');
}

我需要调用 href 属性中的 VerMapa('AVDA. DE AMERICA, 2 -33880 POLA DE ALLANDE','RODRIGUEZ-PELAEZ PEÑA, ANA MARIA','AVDA. DE AMERICA, 2 -33880','33880','ALLANDE','183','178') javascript 函数并获取返回的 HTML 代码。

我已经检查了 spider-monkey 和 PyV8,但我认为它们在这里帮不了我。蜘蛛猴很清楚地告诉你不能调用 javascript 定义的函数。

我现在正在尝试使用 Selenium,但我不知道如何将源代码返回给 python。

据我所知,我刚刚实现了一个测试脚本并设法在浏览器窗口中加载了请求的页面。

from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.farmasturias.org/GESCOF/cms/Guardias/FarmaciaBuscar.asp?IdMenu=111")
htmlCode = browser.execute_script("return VerMapa('AVDA. DE AMERICA, 2  -33880 POLA DE ALLANDE','RODRIGUEZ-PELAEZ PEÑA, ANA MARIA','AVDA. DE AMERICA, 2  -33880','33880','ALLANDE','183','178')")
print htmlCode;

1.- 我在 htmlCode var 中没有得到任何东西。 ¿我怎样才能取回由 javascript 函数生成的源代码?我已经从这篇文章Getting the return value of Javascript code in Selenium

2.- 有什么方法可以在不打开任何浏览器窗口的情况下使用 Selenium?

【问题讨论】:

  • 我用 java 尝试了相同的代码,并填充了一个新的弹出窗口。执行 javascript 并使用 print htmlCode 后,是否需要显示地图的弹出窗口的 html 源代码?
  • 也许我没有说清楚。代码会弹出一个包含预期内容的新窗口,但 htmlCode var 中没有返回任何内容。我正在尝试在该 var 中获取页面的源代码。
  • @DavidCasillas 你要主页的源代码还是新打开的弹窗?
  • 为弹出窗口创建的on。

标签: python selenium-webdriver


【解决方案1】:

VerMapa 函数没有返回值。这就是您的 htmlCode 变量没有显示任何内容的原因。

要获取新窗口的源,先调用VerMapa,然后切换到新窗口,再获取源。

# get all open windows
handles = set(broswer.window_handles)

# remove the current window from the set
handles.remove(browser.current_window_handle)

# switch to the other window
browser.switch_to_window(handles.pop())

# get the source of that window
htmlCode = browser.page_source

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多