Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在作业中使用Python/Selenium/Best工具获取通过JavaScript生成的图像请求的URI?_Python_Selenium_Http Headers_Analytics - Fatal编程技术网

在作业中使用Python/Selenium/Best工具获取通过JavaScript生成的图像请求的URI?

在作业中使用Python/Selenium/Best工具获取通过JavaScript生成的图像请求的URI?,python,selenium,http-headers,analytics,Python,Selenium,Http Headers,Analytics,我有一些来自第三方供应商的JavaScript,它正在发起一个图像请求。我想找出这个图像请求的URI 我可以在浏览器中加载页面,然后监视“实时HTTP头”或“篡改数据”,以确定图像请求URI,但我更愿意创建一个命令行进程来完成此操作 我的直觉是,使用python+qtwebkit是可能的,但也许有更好的方法 澄清一下:我可能有这个(过于简化的代码) 后缀=magicNumberFunctionIDontHaveAccessTo(); url=”http://foobar.com/functio

我有一些来自第三方供应商的JavaScript,它正在发起一个图像请求。我想找出这个图像请求的URI

我可以在浏览器中加载页面,然后监视“实时HTTP头”或“篡改数据”,以确定图像请求URI,但我更愿意创建一个命令行进程来完成此操作

我的直觉是,使用python+qtwebkit是可能的,但也许有更好的方法

澄清一下:我可能有这个(过于简化的代码)


后缀=magicNumberFunctionIDontHaveAccessTo();
url=”http://foobar.com/function?parameter=“+后缀
img=document.createElement('img');src=url;文件.all.body.appendChild(img);
然后,一旦页面被加载,我就可以通过嗅探数据包来找出url。但我不能从源头上理解它,因为我无法预测MagicNumber函数的结果…()

任何帮助都将不胜感激


谢谢。

为什么你就不能读一下
后缀
,或者
url
?图像是加载在iframe中还是加载在页面中

如果它加载到您的页面中,那么这可能是一个肮脏的黑客行为(将document.body替换为所考虑的任何元素):


你为什么不能直接读一下后缀,或者url?图像是加载在iframe中还是加载在页面中

如果它加载到您的页面中,那么这可能是一个肮脏的黑客行为(将document.body替换为所考虑的任何元素):


我会从许多用Python编写的文件中挑选任何一个——可能是列表顶部最简单的文件之一——并对其进行调整,以记录所有请求的URL(以及代理服务的URL),例如,将它们附加到文本文件中——在不失一般性的情况下,将该文本文件称为“XXX.txt”

现在您只需要一个脚本:启动有问题的代理服务器;在你想要的主要URL上启动Firefox(或其他任何浏览器),并将有问题的代理设置为你的代理(参见示例了解如何启动),尽管我相信其他浏览器也可以工作;等待一段时间(例如,直到代理的XXX.txt文件的更改时间超过N秒);阅读XXX.txt,只提取您关心的URL,并在任何地方记录它们;关闭代理和Firefox进程


我认为,与任何基于qtwebkit、selenium或其他“自动化工具包”的更通用的解决方案相比,针对您的特定需求,这将更快地实施并正确工作.

我会从众多用Python编写的文件中挑选任何一个——可能是列表最顶端最简单的一个——并对其进行调整,以记录所有请求的URL(以及代理服务的URL),例如,将其附加到文本文件中——在不失一般性的情况下,将该文本文件称为“XXX.txt”

现在您只需要一个脚本:启动有问题的代理服务器;在你想要的主要URL上启动Firefox(或其他任何浏览器),并将有问题的代理设置为你的代理(参见示例了解如何启动),尽管我相信其他浏览器也可以工作;等待一段时间(例如,直到代理的XXX.txt文件的更改时间超过N秒);阅读XXX.txt,只提取您关心的URL,并在任何地方记录它们;关闭代理和Firefox进程


我认为,与任何基于qtwebkit、selenium或其他“自动化工具包”的通用解决方案相比,根据您的具体需求,这将更快地实施并正确运行。最简单的方法可能是使用类似HtmlUnit的东西,完全跳过真正的浏览器。通过使用Rhino,它可以评估JavaScript,并可能用于提取URL

也就是说,如果您无法使其正常工作,请尝试Selenium RC并使用captureNetworkTraffic命令(该命令要求Selenium instant以captureNetworkTraffic=true选项启动)。这将启动配置了代理的Firefox,然后让您将请求信息作为JSON/XML/纯文本拉回来。然后,您可以解析该内容并获得所需内容


试试我公司提供的服务。如果您要查找的数据在我们的结果中(单击“查看详细信息”后),您可以从Selenium获得它。我知道,因为我为我的公司BrowserMob为Selenium编写了captureNetworkTraffic API。

最简单的方法可能是使用类似HtmlUnit的东西,完全跳过真正的浏览器。通过使用Rhino,它可以评估JavaScript,并可能用于提取URL

也就是说,如果您无法使其正常工作,请尝试Selenium RC并使用captureNetworkTraffic命令(该命令要求Selenium instant以captureNetworkTraffic=true选项启动)。这将启动配置了代理的Firefox,然后让您将请求信息作为JSON/XML/纯文本拉回来。然后,您可以解析该内容并获得所需内容


试试我公司提供的服务。如果您要查找的数据在我们的结果中(单击“查看详细信息”后),您可以从Selenium获得它。我知道,因为我为我的公司BrowserMob为Selenium编写了captureNetworkTraffic API。

使用。它将实时显示所有请求,您甚至可以在浏览器中调试JS或一步一步地运行它。

使用。它将实时向您显示所有请求,您甚至可以在浏览器中调试JS或一步一步地运行它。

最终,我用python使用Selenium RC完成了这项工作。此解决方案需要selenium rc的python文件,您需要启动java服务器(“java-jar selenium server.jar”)


最终,我用python,使用Selenium RC完成了这项工作。此解决方案需要selenium rc的python文件,您需要启动java服务器(“java-jar selenium server.jar”)


想法是使用命令行中的脚本加载页面;在这种情况下
<script>
suffix = magicNumberFunctionIDontHaveAccessTo();
url = "http://foobar.com/function?parameter=" + suffix
img = document.createElement('img'); img.src=url; document.all.body.appendChild(img);
</script>
var ac = document.body.appendChild;
var sources = [];

document.body.appendChild = function(child) {
    if (/^img$/i.test(child.tagName)) {
        sources.push(child.getAttribute('src'));
    }
    ac(child);
}
from selenium import selenium
import unittest
import lxml.html

class TestMyDomain(unittest.TestCase):
    def setUp(self):
        self.selenium = selenium("localhost", \
            4444, "*firefox", "http://www.MyDomain.com")
        self.selenium.start()

    def test_mydomain(self):

        htmldoc = open('site-list.html').read()
        url_list = [link for (element, attribute,link,pos) in lxml.html.iterlinks(htmldoc)]
        for url in url_list:

            try: 
                sel = self.selenium
                sel.open(url)        
                sel.select_window("null")
                js_code = '''
                myDomainWindow = this.browserbot.getUserWindow();
                for(obj in myDomainWindow) {  

                   /* This code grabs the OMNITURE tracking pixel img */
                    if ((obj.substring(0,4) == 's_i_') && (myDomainWindow[obj].src)) {              
                        var ret = myDomainWindow[obj].src;
                    } 
                }        
                ret;
                '''
                omniture_url = sel.get_eval(js_code) #parse&process this however you want


            except Exception, e:
                print 'We ran into an error: %s' % (e,)


        self.assertEqual("expectedValue", observedValue)


    def tearDown(self):
        self.selenium.stop()

if __name__ == "__main__":
    unittest.main()