2016-04-12 8 views
2

私は、Python/Seleniumを使用してWebサイトを削り取ろうとしていて、部分的にJSで構築されたリンクやものを持っています。私の場合、私はこのようなルックスを取得したいリンク:1は、単に直接このURLをこすりすることはできませんので、以下のようにhttp://www.somesite.de/blah/ {{LINK_ID}}Python 3 webscraping issue(JSに関する)

は、私の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コードを手動で実行する必要がありますか?私のコードが意図したとおりに動作しない理由を全く知りません...

ありがとうございました!

+0

'JS'ファイルから' Python'コードにどのように文字列を送りますか? – Andersson

+0

本当にあなたの質問を理解していない:私はストリングvom JSをPythonに送信しません。ほとんどの場合、JSコードはPythonでdriver.execute_scriptを使用して実行されますが、Seleniumの仕組みを理解する上では、これは実際には不要です。 – Boandlkramer

+0

ok .... '{{link_ID}}'はどこから来ますか? 'href =" http://www.somesite.de/blah/{{link_ID}} "' ' – Andersson

答えて

0

サイトを手動で参照すると、リンクが新しいタブで開きます。 PhantomJSタブに

をサポートしていないあなたは、webdriverをFirefoxで同じことを試みることができるあなたが要素を見ることができる場合は、最初のリンクをクリックして2番目のタブに切り替えて、コンテンツ

を解析シミュレートするが、Pythonのdoesnのtは、認識し、それはフレームの問題は、我々は必要な要素を持っているとPythonは

あなたはフレームの名前を特定し、

を行う必要があります親フレームで検索されるbodyタグ内のiframeがあるかもしれない可能性があり

driver.switch_to.frame( "<>")

私は他のwebdriversといくつかのチェック(FF、クローム、ファントム):すべては非常に同じ例外で失敗しました(要素は見えない)RESP

は、次に制御

HTH

+0

あなたの答えをありがとう。基本的に同じ問題があります。新しいウィンドウを開くためにクリックする必要のあるリンク要素は表示されず、表示/クリック可能になることはありません。ドライバが要素を見つけて、それをクリックするだけで、Pythonは目に見えない例外をスローします。もしあなたが待機を実装すれば、タイムアウト例外が発生します。なぜなら、リンクの終わり部分を構成するJSは決して実行されないからです。 – Boandlkramer

+0

要素を見ることができるが、Pythonが認識できない場合、フレームに問題がある可能性があります。必要な要素があり、親フレームで検索中のbodyタグのiframeがある可能性があります。 unfortunatley が続いて制御 HTHこれはもっともらしい –

+0

上でクリック操作を行う(「<>」)driver.switch_to.frameではなく、ケースのフレームの名前を特定しなければなりません。 "frame"/"frameset"/"iframe"のソースコードのクイック検索でヒットしなかった。 – Boandlkramer

0

UPDATE上でクリック操作を行います。タイムアウト例外。 次に、他のリンクを自動的にクリックしようとしましたが、これも失敗しました。 htmlの "ハードコーディングされた"リンクでは、私のコードが意図したとおりに機能するため、これらのリンクには何らかのスクリプトが含まれていることがわかりました。そこで私は通常のFirefoxセッションでJSを無効にして自分のサイトを調べましたが、これらのリンクやものはすべて実際には見えませんでした。今では

は、私は私の質問/問題を指定できることを100%確信している: 何かは完全に私のページのJavaScriptを実行するからセレンを防ぎます。したがって、私のコードは動作しません。誰かがこの問題を引き起こす可能性のある考えを持っていますか?

関連する問題