質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

1665閲覧

WEBスクレイピング 連続でseleniumが動かない python

tsuru0508

総合スコア65

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2022/05/05 15:50

お世話になっております。
pythonでウェブスクレイピングをチャレンジしております。

ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。
Failed to establish a new connection: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。'))

といったエラーに悩まされております。

やりたい事は、
Aのサイトからデータを取得後、
Bのサイトへデータを登録です。

Aのサイトは、商用?サイトで
Bのサイトは、私が管理しているサイトです。
複数ある商用サイトの売上金額を一覧でみたいので、
ウェブスクレイピングを使おうと考えました。

コードは、貼ってある通りです。
Aサイトからはデータを取得できます。
(先日のアドバイスで取得できるようになりました)

Bサイトへ接続する際の
driver1 = webdriver.Chrome(executable_path="C:\py-mssp\chromedriver.exe", options=options)
で、上記のエラーが発生していると考えています。

ウェブスクレイピングは沢山のサイトから値を自動的に
取得出来ると聞いているので、これくらいの事はできるのかなと。
何か、根本的な条件が抜けているのかなと考え調べましたが、
上記エラーを解決する方法が見つかりませんでした。

何かヒント等を頂けると幸いです。

どうぞよろしくお願いします。

# coding: UTF-8 from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys # ヘッドレスモードの設定。 options = Options() options.add_argument('--headless') options.add_experimental_option('excludeSwitches', ['enable-logging']) # Chromeを起動 driver = webdriver.Chrome(executable_path="C:\py-mssp\chromedriver.exe", options=options) # ログインページを開く url = 'https://aaaaa.com' login = '****@***.***' password = '********' driver.get(url) # ログオン処理 driver.find_element_by_name("userid").send_keys(login) driver.find_element_by_name("password").send_keys(password) driver.find_element_by_id("doLogin").send_keys(Keys.ENTER) # ブラウザの描写が完了させるためにsleep sleep(10) a = driver.find_element_by_css_selector("chromeから取得したselector") print(a.text) driver.quit() driver.close() sleep(30) # Chromeを起動 driver1 = webdriver.Chrome(executable_path="C:\py-mssp\chromedriver.exe", options=options) # ログインページを開く url = 'https://bbbbb.com' tempoid = 1 driver1.get(url) print("here") driver1.find_element_by_name("tempoid").send_keys(tempoid) driver1.find_element_by_name("uriage").send_keys(a.text) driver1.find_element_by_id("btnok").send_keys(Keys.ENTER) print("there") driver1.quit() driver1.close()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2022/05/05 16:00

対象のサイトがスクレイピングを禁止していて何らかの対策をしている可能性はありませんか?
tsuru0508

2022/05/05 16:22

meg_様 夜分にありがとうございます。 Aサイトに接続する部分をコメントアウトして、Bサイトに接続するだけの コードにした場合、データの登録は出来ておりました。 ただ、driver1.closeかdriver1.quitのところだと思いますが、 質問の際にしたエラーは表示されておりました。 今日はこれで失礼します。おやすみなさい。
meg_

2022/05/05 17:03

そもそもエラーは何処で(どの行で)発生しているのでしょうか? 確認ですが対象サイト(Aサイト)はスクレイピングしても良いサイトなんですよね?
tsuru0508

2022/05/05 23:35

おはようございます。 1行ずつプリント文をいれたところ、最初の driver.close というところで発生しています。 # ブラウザの描写が完了させるためにsleep sleep(10) a = driver.find_element_by_css_selector("chromeから取得したselector") print(a.text) driver.quit() print("aa") <-- このプリントは表示されている driver.close()  <-- ここでエラーだと思います。 sleep(30) なお、Aサイトのスクレイピングは、特に禁止はされていません。 よろしくお願いします。
guest

回答2

0

解決したようですが、そもそも方針が良くないです。間違いでは無いが無駄。

Python

1driver.quit() 2driver.close() 3sleep(30) 4 5# Chromeを起動 6driver1 = webdriver.Chrome(executable_path="C:\py-mssp\chromedriver.exe", options=options)

の部分のコードを全部削って、以下のdriver1を全部driverに書き換えるのが良いと思います。

投稿2022/05/06 00:13

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsuru0508

2022/05/06 03:29

otn様 ありがとうございます。 そうです!無駄な事してるなぁと思いながらも エラーが消せないので、インスタンス?というんでしょうか、 driverでエラーが出るなら、driver1を作って別で動かせば 動くのじゃないかな?と思い、作成した次第です。 アドバイスの通り直せば、無事動作しました。 自分も無駄だなぁと思ってまとめました。その時私が書いたコードは、 直前にdriver.closeを行って、再度driver.get(url)を 行っており、その場合も同じようなエラーが出ていました。 なので、安易に分けていましたが、コードがスッキリしました。 そもそもcloseしなくても良かったんですね。勉強になりました。 一つ前に進みました!!! ありがとうございました。
guest

0

自己解決

meg_様 お世話になっております。

driver.closeをコメントアウトしたら最後まで動作しました。

driver.close():アクティブになっているタブを終了
driver.quit():すべてのタブを閉じてブラウザを終了

というサイトを見つけました。

driver.quit()
driver.close()

この順序だと、全てのタブを閉じてブラウザを終了してから
アクティブになっているタブを終了しようとしたことが原因と
推測し、全て

driver.close()
driver.quit()

の順序に変えたら、動作しました!

この順序がダメなんでしょうね。

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

投稿2022/05/05 23:50

tsuru0508

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問