JavaScript を使用してブラウザの説明を取得しようとしていたところ、奇妙な結果が得られました。
productSub: 20100101 # When I open it with my Mozila FF browser
productSub: 20030107 # when I open it with PyQt4
vendorSub: # nothing in here with my Mozila FF
vendorSub: Apple Computer, Inc. # with PyQt4 ( even though I don't have anything to do with Apple)
これは HTML/JS です:
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<p id="myp">Hi</p>
<script>
body = document.getElementsByTagName('body')[0];
var nav_div = document.createElement('div');
nav_div.id = 'nav_div';
for (para in navigator) {
var para_p = document.createElement('p');
var context = document.createTextNode(para + ': ' + navigator[para]);
para_p.appendChild(context);
para_p.id = para;
nav_div.appendChild(para_p);
}
body.appendChild(nav_div);
</script>
</body>
</html>
Python/PyQt4 コードは次のとおりです。
#! /usr/bin/env python2.7
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
import sys, signal
class MySettings(QWebPage):
def userAgentForUrl(self, url):
return 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko/20100101 Firefox/17.0'
class Opener(QWebView):
def __init__(self):
QWebView.__init__(self)
url = QUrl('/home/john-the-ripper/JavaScript/w.html')
self.setPage(MySettings())
self.load(url)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
opener = Opener()
# press Ctrl + C for exit
if signal.signal(signal.SIGINT, signal.SIG_DFL):
sys.exit(app.exec_())
app.exec_()
ご覧のとおり、マシンと同じようにユーザー エージェントを定義しました。
userAgent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko/20100101 Firefox/17.0
PyQt4 の結果は次のとおりです。
そして、これが私のネイティブ ブラウザ Mozilla Fire Fox の結果です。
質問は次のとおりです。
- で定義したのに、なぜ
productSub
異なるように見えるのかuserAgentForUrl()
- このページを PyQt4 で開くと
vendorSub
、Apple Computer, Inc.