2016-08-16 96 views
1

J. Kazilの "Pythonによるデータ暴論"の読み方このサンプルでは、​​Seleniumでの画面読み上げについて説明します。python 3 - セレニウム - Webページからスクラップしたテキスト要素の印刷

# sele.py 

    1 import time 
    2 from selenium import webdriver 

    8 browser = webdriver.Firefox() 
    9 browser.get('http://www.fairphone.com/we-are-fairphone/') 

    11 iframe = browser.find_element_by_xpath("//iframe[@id='twine-iframe-none']") 
    12 new_url = iframe.get_attribute('src')  
    13 browser.get(new_url) 
    14 time.sleep(4) 
    15 
    16 all_bubbles = browser.find_elements_by_css_selector('div.content') 
    17 for elem in all_bubbles: 
    18  print(elem.text) 

私は本のコードのいくつかの変更:
行11:「データ論争」の著者で、元のコードのみを使用し、//インラインフレーム(著者によって与えられたコード以下)のコードは次のようです空白のページになったxpath式の場合
14行目:タイムアウトなしにコマンドラインカーソルが返されたので、ここにタイムアウトを追加しました
18行目:Python 2で元のコードが動作しますが、 Python 3の例がこれまでに働いています(私は現在320ページにあります)

新しいブラウザウィンドウが開き、フェアホンのホームページが読み込まれ、iframe部分に切り替わるということです。これはすべていいです。次のビットは "気泡"の内容を印刷することですが、それは起こりません。

Traceback (most recent call last): 
    File "sele.py", line 16, in module all_bubbles = browser.find_elements_by_css_selector('div.content')  
File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 449, in find_elements_by_css_selector 
    return self.find_elements(by=By.CSS_SELECTOR, value=css_selector) 
    File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 778, in find_elements 
    'value': value})['value'] 
    File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File ".../virtEnv/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: Permission denied to access property "handleEvent" 
Stacktrace: 
    at <anonymous> (http://apps-cdn.twinesocial.com/js-min/files/player%252Fbugsnag.js+player%252Fjquery-1.11.1.min.js+player%252Fjquery-easing-1.3.js+player%252Fjquery.timeago.js+player%252Fbootstrap-3.1.1.min.js+player%252Fisotope.pkgd.min.js+player%252Fjquery.lazy.min.js+player%252FjMinEmoji-SVG.min.js+player%252Ftheme-base.js+player%252Ftheme-base-utility.js+player%252Ftheme-base-toolbar.js+player%252Ftheme-base-fx.js+player%252Ftheme-base-manage.js+player%252FisInViewport.min.js+player%252FAnimOnScroll.js+player%252Fmodernizr.custom.js+player%252Fselect2.min.js+player%252Fhandlebars.min.js+player%252Ftheme%252Fclassic/v/2.9/t/1471301242.js:2) 

私は(OSはUbuntuの16である)、仮想環境でのPython 3.5を使用しています:代わりに、私はかなり詳細なエラーメッセージを収集します。私はここにかなり詰め込まれていて、Read the Docsのような文書は、私が現在いるところに進むのを助けました。 BeautifulSoupやScrapyのようなクールなものがあることを知っていますが、今のところこれをSeleniumでやりたいと思います。

編集: は可能な重複として識別されました。 その質問はBugsnagとPerlの文脈の中にあります。それにもかかわらず、私は

15 active_element = browser.switch_to_active_element() 

を添加し、同じエラーメッセージを生成

16 all_bubbles = active_element.find_elements_by_css_selector('div.content') 

を変化させることにより挙げる回避策を試みました。私は、エラーメッセージの最後の部分に実際に最終行にバグナグがネストされていることに気付きました。私はバグナグを使用していないので、セットアップにどう関連するのか分かりません。しかし、私はFirefox 48とSelenium 2.53.6を使用していることに言及すると役に立つかもしれません。

+0

可能な複製を参照することができます(http://stackoverflow.com/questions/29918511/ permission-denied-to-access-property-handleevent) –

答えて

0

switch_to_active_element()は非推奨です。

だから、それは次のようになります。

active_element = browser.switch_to.active_element 

あなたは[許可プロパティにアクセスするために拒否 "のhandleEvent"]のthis

関連する問題