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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

5268閲覧

python seleniumのページ遷移について

yu--32

総合スコア10

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/07 15:12

編集2019/12/07 15:19

前提・実現したいこと

google chorme でpython selenium を使用して、webページをクローリングしようと考えています。

入りたいページのxptah・elementはこのような感じです。
【xpath】
/html/body/form/table/tbody/tr[1]/td[4]/a
【element】
<a href="javascript:doEdit('408843');">

<script language="JavaScript">
<!-- var sStrFmt; sStrFmt=tableFormat('にんにく',33); document.write(sStrFmt); -->

</script>にんにく

</a>

このため、私はこのようなcodeを作成しました(いろいろ作ってみましたが一番いいのかな?と思ったものをあげてみました、すいません)。
driver.find_element_by_xpath("//a[@herf = 'javascript:doEdit('408843');']").click();
ここで通常どおりxapthをそのまま引用しなかったのは、それだと違うelementも同一のxpathになってしまっていたからです
また、遷移先のurlを直接指定していないのも、上記と同じように、違うelementだけれどもそれをクリックした先のurlが同じになっているからです。(例えば、元のページ(url末尾1)⇒遷移したいページ(末尾2)。でも、元ページに記載してあるほかのリンク先も遷移したいページとおなじ(末尾2)になっている。)

しかし、次のようなエラーが発生してしまいました。
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression //a[@herf = 'javascript:doEdit('408843');'] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//a[@herf = 'javascript:doEdit('408843');']' is not a valid XPath expression.

一応googleで検索したり、過去の質問でもよく載せていただいているhp(https://kurozumi.github.io/selenium-python/locating-elements.html)も見てみましたがよく分かりませんでした。

質問するにあたって情報が足りているかも判断がつかずに申し訳ないのですが、次のページを選択するためにはどうすればよいのかお知恵を貸していただけると助かります。どうぞよろしくお願いします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

そんなくどいことせず直にJSを実行してやればいいです。

python

1driver.execute_script('javascript:doEdit(\'408843\');')

投稿2019/12/10 00:05

shirai

総合スコア1290

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

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

yu--32

2019/12/31 00:56

コメントありがとうございました。当方の知識不足でこの要素がiframe内にあり操作領域を変更しなければいけないことを理解しておりませんでした。 iframe処理した後にアドバイスのとおり直接実行したらページ遷移することができました。大変助かりました。
guest

0

タイプミスですね。指定したものが見つからないと言ってるのだから、最初に疑うべきはタイプミスです。
初心者の間違いの大半はタイプミスです。
@herf@href

また、引用符がおかしいです。

Python

1"//a[@herf='javascript:doEdit('408843');']" 23"//a[@href=\"javascript:doEdit('408843');\"]"

投稿2019/12/08 14:33

otn

総合スコア84505

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

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

yu--32

2019/12/09 07:25

ご回答いただきありがとうございました。 私もまったく気づいておらずherfとなっておりました。大変失礼しました。 ただし、くどいようで大変申し訳ないのですが、やはり下記のNoSuchElementExceptionというエラーが出てきてしまいました。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//a[@href="javascript:doEdit('408843');"]"} ですが、大切なご指摘ありがとうございました。
otn

2019/12/09 12:26

再現しませんね。質問のHTMLをコピペしてWindows10でやってみましたが、 >>> from selenium import webdriver >>> driver = webdriver.Chrome() >>> a=driver.find_element_by_xpath("//a[@href=\"javascript:doEdit('408843');\"]") >>> a <selenium.webdriver.remote.webelement.WebElement (session="1a5bf4e9bde287a4c112971cc5047b30", element="4d3379a0-006e-43d9-b678-a4f07988e867")> >>> a.text 'にんにく' >>> この文の前に、input(”OK?") を入れて、完全にブラウザに画面が表示されてから、enterで次に進んでみるとか。それでだめなら、質問に書いてあるHTMLが間違っているということです。
yu--32

2019/12/31 00:58

コメントありがとうございました。 こちらの知識不足で選択したい要素がiframe内にあるのが原因でした。(でも、iframe内の処理をした後にxpathを通してみてもうまくいきませんでした、xpathの使い方がうまくできていなかったのかもしれません) 長い間コメントしていただきありがとうございました。とても勉強になりました。
guest

0

class名を指定して下記を実行いただくと画面遷移できるかと思います。

for i in find elements by class name("hoge") driver.get(i find element by tag name("a").get_attribute("href"))

投稿2019/12/08 11:39

john_doe_

総合スコア354

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

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

yu--32

2019/12/09 07:21

ご回答ありがとうございました。そういった検索の方法があることを学ぶことができました。 ただ、知識不足であることも加えて、class名が特定できずに指定することができませんでした。いままでは、class名やid名がついているelementをとることが多く、その場合だとできるのですが、 <a href="javascript:doEdit('408843');">だけですとどのように処理すればよいのか把握できていない状態です。
john_doe_

2019/12/10 02:00

<a href="javascript:doEdit('408843');">が含まれているclassがあるはずです。 おそらく、<a href="javascript:doEdit('408843');">の上に記載されておるかと思います。 ご検討されている通り、<a href="javascript:doEdit('408843');">だけを実行されたいのであれば、shiraiさんのご提案内容が的確かと存じます。
yu--32

2019/12/31 01:00

コメントありがとうございます。 知識不足で選択したい要素がiframe内にございました、大変失礼しました。 class名は上層のクラス名を使用すればいいのですね、とても勉強になりました。ありがとうございました。
guest

0

SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//a[@herf = 'javascript:doEdit('408843');']' is not a valid XPath expression.
は 出なくなると思います

Python

1driver.find_element_by_xpath("//a[@herf='javascript:doEdit(\"408843\");']").click()

投稿2019/12/08 04:34

Reach

総合スコア733

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

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

yu--32

2019/12/08 05:10

コメントありがとうございます。おっしゃるように、コードを driver.find_element_by_xpath("//a[@herf='javascript:doEdit(\"408843\");']").click() のように書き直したところ、上記のエラーがでなくなりました。ありがとうございます。 ただし、かわりのエラーはどうしてもでてきてしまうので、もしお分かりになる方いらっしゃいましたらどうぞよろしくお願いいたします。 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//a[@herf='javascript:doEdit("408843");']"} (Session info: chrome=78.0.3904.108)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問