4

サイトをスクレイピングして操作しようとしています。BeautifulSoup を使用すると、やりたいことがほとんどできますが、すべてではありません。セレンはその部分を処理できるはずです。Selenium Firefox Plugin を使用して動作させることができます。今すぐ自動化する必要があります。私の問題は、対話する必要がある領域が、OpenID プロバイダーを介して処理されるログイン プロンプトの背後にあることです。

幸いなことに、このブックマークレットを使用して、設定されている Cookie を取得できました。javascript:void(document.cookie=prompt(document.cookie,document.cookie));これにより、ログインして BeautifulSoup を使用してページを解析できます。

これは、次のコードを介して行われます。

jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders.append(("Cookie","__cfduid=<hex string>; __utma=59652655.1231969161.1367166137.1368651910.1368660971.15; __utmz=59652655.1367166137.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=<a session id>; __utmb=59652655.1.10.1368660971; __utmc=59652655"))
page = opener.open(url).read()
soup = BeautifulSoup(scrap1)
...parse stuff...

この時点で、jarは空であり、最終的な対話を行う必要があります (いくつかの DIV 要素をクリックし、別の DIV 要素が適切に更新されていることを確認します)。適当にログイン。

上記のクッキーを、セレンが認識して認識するものに移動するにはどうすればよいですか?

私はこのようなコードを試しました

for c in jar:
    driver.add_cookie({'name':c.name, 'value':c.value, 'path':'/', 'domain':c.domain})

しかし、jarは空なので、これは機能しません。このクッキーを瓶に入れる方法はありますか? この Cookie を使用して OpenId ログインをバイパスしているため、サーバーから何も返されません。

4

1 に答える 1

3

あなたはこれに逆行しているかもしれないと思います。Cookie を Selenium に渡す代わりに、Selenium で直接ログインを実行してみませんか?

例えば:

browser = webdriver.Firefox()

username = 'myusername'
password = 'mypassword'

browser.get('http://www.mywebsite.com/')
username_input = browser.find_element_by_id('username') #Using id only as an example
password_input = browser.find_element_by_id('password')
login_button = browser.find_element_by_id('login')

username_input.send_keys(username)
password_input.send_keys(password)
login_button.click()

これにより、Cookie を手動で収集することを心配する必要がなくなります。

ここから、ページのソースを取得して BeautifulSoup に渡すことができます。

source = browser.page_source
soup = BeautifulSoup(source)

これが役に立ったことを願っています。

于 2013-05-17T20:41:06.200 に答える