@dvomaks

Как получить доступ к iframe на чужом домене в python+webkit?

Для начала сам код на питоне:
from gi.repository import Gtk,WebKit
import json

def load_finished(webview, frame):
    js = 'alert("a");'
    js2 = """ 
        var iframe = document.querySelector('iframe');
        console.log(iframe.contentWindow.document);
    """
    v.execute_script(js2)
    

w = Gtk.Window()
v = WebKit.WebView()
v.connect("load-finished", load_finished)

sw = Gtk.ScrolledWindow()

w.add(sw)
sw.add(v)
w.set_size_request(500,700)

v.load_html_string("""
<!doctype html>
<html>
<head>
<title>A demo</title>
</head>
<body>
<script src="//www.google.com/recaptcha/api.js"></script>
<div id="gr" class="g-recaptcha" data-sitekey="6LdbCR0TAAAAAGRU12rA3iBsS5AVRh5rbYAY1TPX"></div>
</body>
</html>
""", "http://bigclaim.ru")

w.show_all()
Gtk.main()


Суть в том что в окошке загружается рекапча которая привязана к домену. Как можно получить доступ к содержимому iframe который генерируется скриптом рекапчи. Тоесть нужно с помощью js кликнуть на кнопочку, выбрать нужные элементы и тд

В данном варианте в консоли выводит

** Message: console message: bigclaim.ru @3: TypeError: null is not an object (evaluating 'iframe.contentWindow')

** Message: console message: @0: Blocked a frame with origin "bigclaim.ru" from accessing a frame with origin "https://www.google.com". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "https". Protocols must match.

  • Вопрос задан
  • 327 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
Вместо WebKit используйте Phantom.js или Selenium, оба поддерживают кросс-доменные обращения к фреймам, или еще можете Spartan поставить, он кроссплатформенный, я с ним на Ubuntu 14.04 работаю, он (Edge) является принциально новым "движком", который состоит из исходного кода Trident, полностью переписанного на .NET, поэтому я его из-под Mono запускаю, я даже в зажигалке в пьезоэлектрический элемент установил Mono и браузер Spartan там работает, а он интересен тем, что на все 100% совместим с Trident из которого не заимствует ни строчки кода, благодаря этому в нем такие же "навороченные" DOM и BOM API как и в IE, они очень удобные и нарушают любые политики.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы