Python 3 webscraping问题(关于JS)

时间:2016-04-12 11:16:43

标签: javascript python selenium

我很难尝试抓一个网站(使用Python / Selenium),它有部分JS构造的链接和内容。就我而言,我想要获得的链接如下所示:http://www.somesite.de/blah/ {{link_ID}}

由于不能直接刮掉这个URL,我的Python代码如下:

def URL_from_JS (URL):
    driver = webdriver.PhantomJS(executable_path=r'C:\###\phantomjs-2.1.1-windows\bin\phantomjs.exe')
    driver.get(URL)

    link = driver.find_element_by_xpath('//a[@title="Zum Expose"]')
    new_URL = link.get_attribute('href')
    print(new_URL)      #for testing reasons
    driver.close()
    return new_URL

这是按预期工作的,但是JS代码显然没有执行,因为结果完全如上所述(即http://www.somesite.de/blah/ {{link_ID}})。等待元素变得可见只会导致超时错误。 {{link_ID}}引用了一些外部.js文件中使用的变量,该文件在HTML代码中导入了上面的一些行。

我是否必须手动执行导入的Javascript代码?我完全不知道为什么我的代码没有按预期工作......

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

当我手动浏览网站时,它会在新标签页中打开链接。 PhantomJS不支持标签

您可以尝试使用webdriver firefox,模拟点击第一个链接,切换到第二个标签并解析内容

如果你能看到元素但是python不能识别,那么它可能是框架的问题,在body标签中可能有iframe,其中我们有必需的元素,而python正在父框架中搜索

您必须确定框架的名称并执行

driver.switch_to.frame("<>&#34)

然后点击控件

HTH

答案 1 :(得分:0)

更新: 我对其他网络驱动程序(FF,Chrome,Phantom)进行了一些检查:所有程序都失败了,因为异常(元素不可见)。超时例外。 接下来,我尝试自动点击其他一些链接 - 这也失败了。我发现所有这些链接都有一些脚本,因为"硬编码" html中的链接我的代码按预期工作。因此,我在普通的Firefox会话中检查了我的网站,并禁用了JS,所有这些链接和内容确实都是不可见的(因此无法点击)。

到现在为止,我100%确定我可以指定我的问题/问题: 完全阻止了Selenium执行我的网页的Javascript ;因此,我的代码不起作用。有人知道可能导致这个问题的原因吗?