【问题标题】:Selenium WebDriver + PhantomJS + Python - Execute Script and Handle Dialog BoxSelenium WebDriver + PhantomJS + Python - 执行脚本和句柄对话框
【发布时间】:2017-05-14 08:28:46
【问题描述】:

我对编码还很陌生,如果这是一个愚蠢的问题,请原谅我:

我正在尝试从通过执行 JavaScript 填充的列表中获取数据,这是相关的 HTML 部分:

<a data-popover-ui="524151" data-popover-type="Search" href="javascript:LoadLists('SaveListSearchDetails.aspx?AutoLoad=1&amp;SavedListID=EID77FF7H&amp;SavedListTypeID=Search')" data-original-title="" title=""><span class="grid-result no-break">AVEV HRC FEC Master File</span></a>

点击此超链接后,会出现一个要求确认的对话框

这是我尝试过的:

browser = selenium.webdriver.PhantomJS(executable_path=r"E:\phantomjs-2.1.1-windows\bin\phantomjs.exe")

browser.get('~~link where the javascript is~~')

first_list = browser.execute_script("LoadLists('SaveListSearchDetails.aspx?AutoLoad=1&amp;SavedListID=EID77FF7H&amp;SavedListTypeID=Search')"

browser.get('~~link where the list is~~')

browser.get_screenshot_as_file

browser.save_screenshot('1.jpg')

屏幕截图让我看看它是否快速运行。该列表未更新。我对 java 编码几乎一无所知,所以我完全不确定发生了什么,但我认为这是因为在执行 JavaScript 时,我没有处理出现的对话框。

我想我可以使用 get_element_by_SOMETHING,但我不确定该使用哪个,因为该 HTML 部分中没有 ID,我仍然需要帮助来处理该死的对话框。

谢谢你


PhantomJS 不工作。切换到 Chrome 作为 WebDriver。

t_list = find_element_by_link_text("~~text~~")
t_list.click()
time.sleep(5)
Alert(browser).accept()

【问题讨论】:

    标签: javascript python selenium selenium-webdriver phantomjs


    【解决方案1】:

    好吧,您可能需要在执行脚本中或之后延迟,以便加载列表(前提是它在普通浏览器中加载)。

    【讨论】:

    • 一个简单的 time.sleep() 不起作用,甚至等了 5 分钟(比在浏览器中加载要多得多)。此外,如果正确理解您的评论,则在运行代码后在浏览器中访问列表时列表不会更改。
    • 不确定 java ,但 python 有 find_element_by_id 、 find_element_by_name 、 find_element_by_xpath 等。我确定 java 一定有类似的。你可以使用 web inspector / firebug 来查找 id 或 xpath。
    • 我正在使用 Python,我知道有 find_element_by_ 但我不知道在这种特殊情况下使用哪个。我不完全确定什么是 xpath 和 css 选择器,这可能是要使用的选择器
    • 没有得到你。所有浏览器都有网络开发人员(如果没有安装 firebug 插件)右键单击任何元素并检查。
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多