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

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

新規登録して質問してみよう
ただいま回答率
85.35%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

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

selenium

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

Q&A

2回答

2176閲覧

if文の中でxpathの値を代入したいです。

chara2100

総合スコア1

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

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

selenium

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

0グッド

0クリップ

投稿2020/10/07 03:15

編集2020/10/07 03:32
if i := browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li"): i == ("出品中の商品はありません"): print("出品中の商品はありませんでした") else: like = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[1]/span") comment = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[2]/span") no_item = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li") like_check = int(like.text) comment_check = int(comment.text) no_items = str(no_item.text) print(no_items) if like_check == 0 and comment_check == 0 and no_items != "出品中のアイテムがありません": print("---------- いいねもコメントも付いていませんでした。商品を削除しました。 ----------") i = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/figure/img") i.click() fast_p = browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button") actions = ActionChains(browser) actions.move_to_element(fast_p) actions.perform() browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button").click() time.sleep(2) browser.find_element_by_xpath("/html/body/div[1]/aside[1]/div/div[2]/form/button").click() elif like_check >= 1 and comment_check == 0: print("---------- いいねのみ付いていました。商品を削除しました。 ----------") i = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/figure/img") i.click() time.sleep(0.5) fast_p = browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button") actions = ActionChains(browser) actions.move_to_element(fast_p) actions.perform() time.sleep(0.5) browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button").click() time.sleep(2) browser.find_element_by_xpath("/html/body/div[1]/aside[1]/div/div[2]/form/button").click() else:print("---------- コメントが付いていました。削除を取り消しました。 ----------") time.sleep(1) browser.quit() print("---------- " + str(now) + " 一つ目の商品 削除完了 --------") fast_project()

if文の条件式で、xpathで取得した値を代入したいです。
if文の前に代入をすると処理が走るんですけど、出品数が0の場合は取得できる値が無い為エラーが走ります。
なので、出品がある場合は代入して他の処理を。
無い場合は代入せずにブラウザーをとじる。
のコードを書きたいです。

  
#エラーメッセージ
File "c:/Users/81703/OneDrive/デスクトップ/python/tes.py", line 36
if i := browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li"):
^
SyntaxError: invalid syntax

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

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

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

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

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

y_waiwai

2020/10/07 03:18

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
y_waiwai

2020/10/07 03:20

if の後ろは条件文を置くところです。 なぜそこに代入式を置く必要があるんでしょうか
chara2100

2020/10/07 03:36

修正しました。 xpathの代入(取得できる値がある場合)を先に記述してif文を書くと成功するのですが、取得できる値が見つからない場合先にエラーになってしまいその後のif文の処理が走らなくて困っています。。。
quickquip

2020/10/07 06:13

> xpathの代入(取得できる値がある場合)を先に記述してif文を書くと成功するのですが、 このコードを書いて > 取得できる値が見つからない場合先にエラーになってしまい この時のエラーを書く方が、今の状態よりは伝わると思います。
guest

回答2

0

続きからの回答で恐縮ですが。

エラーが出ている文の1行上に

python

1print(browser.page_source)

と打ってください。
Seleniumから見たDOMに目的の要素があるかを確認してください。

ない場合はとりあえずsleepを入れてみましょう。

投稿2020/10/11 16:48

shirai

総合スコア1290

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

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

0

if文、for文、while文におけるコロンは、通常ヘッダー行の文末に記載するものです。

browser.find_element_by_xpath('/html/body/div[1]/main/div[1]/section/div/ul/li')という
この動作自体を変数に代入したいという事であれば、動作自体を変数に代入するという事は出来ません。
この場合は、動作の末に取得した結果が変数に代入されてしまいます。

対象のページや、xpathがどういった内容のパスになっているのかがわからない為
パスが<li>出品中の商品はありません</li>という内容であると仮定した場合のコードの書き方は以下となります。

python

1xpath = '/html/body/div[1]/main/div[1]/section/div/ul/li' 2not_found = '出品中の商品はありません' 3 4if browser.find_element_by_xpath(xpath).text == not_found: 5 print('出品中の商品はありませんでした') 6else: 7 like = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[1]/span") 8910

投稿2020/10/07 03:41

nto

総合スコア1438

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

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

chara2100

2020/10/07 03:57

コード書き換えてきました!! やはりエラーを吐きます。。。 """ def delete_job(): def fast_project(): global like_check global comment_check global like global comment #ブラウザー options = webdriver.ChromeOptions() options.add_argument("user-data-dir=C:\Users\81703\AppData\Local\Google\Chrome\User Data") browser = webdriver.Chrome(executable_path=r'C:\Users\81703\OneDrive\デスクトップ\driver\chromedriver.exe', chrome_options=options) browser.get("xxxxxxxxxxxxxx") time.sleep(1) browser.find_element_by_xpath("/html/body/div[1]/main/div[2]/nav/ul[1]/li[7]/a").click() time.sleep(2) xpath = '/html/body/div[1]/main/div[1]/section/div/ul/li' not_found = '出品中の商品はありません' if browser.find_element_by_xpath(xpath).text == not_found: print('出品中の商品はありませんでした') browser.quit() else: like = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[1]/span") like = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[1]/span") comment = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[2]/span") like_check = int(like.text) comment_check = int(comment.text) if like_check == 0 and comment_check == 0: print("いいねもコメントも付いていませんでした。商品を削除しました。") i = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/figure/img") i.click() #スクロール fast_p = browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button") actions = ActionChains(browser) actions.move_to_element(fast_p) actions.perform() #削除実行 browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button").click() time.sleep(2) browser.find_element_by_xpath("/html/body/div[1]/aside[1]/div/div[2]/form/button").click() elif like_check >= 1 and comment_check == 0: print("いいねのみ付いていました。商品を削除しました。") i = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/figure/img") i.click() time.sleep(0.5) #スクロール fast_p = browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button") actions = ActionChains(browser) actions.move_to_element(fast_p) actions.perform() #削除実行 time.sleep(0.5) browser.find_element_by_xpath("/html/body/div[1]/div[1]/div/button").click() time.sleep(2) browser.find_element_by_xpath("/html/body/div[1]/aside[1]/div/div[2]/form/button").click() else:print("コメントが付いていました。削除を取り消しました。") time.sleep(1) browser.quit() fast_project() delete_job() """ #エラー文 DevTools listening on ws://127.0.0.1:60483/devtools/browser/52badf2e-c321-4812-92fb-df367b3410ba Traceback (most recent call last): File "c:/Users/81703/OneDrive/デスクトップ/python/ap pyth/delete.py", line 79, in <module> delete_job() File "c:/Users/81703/OneDrive/デスクトップ/python/ap pyth/delete.py", line 78, in delete_job fast_project() File "c:/Users/81703/OneDrive/デスクトップ/python/ap pyth/delete.py", line 37, in fast_project like = browser.find_element_by_xpath("/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[1]/span") File "C:\Users\81703\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\81703\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element 'value': value})['value'] File "C:\Users\81703\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\81703\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/main/div[1]/section/div/ul/li[1]/a/div/div[2]/span[1]/span"} (Session info: chrome=85.0.4183.121)
nto

2020/10/07 04:07

先程差し上げている回答はそもそもこれで動作しますよという回答ではございません。 あくまでもどういった仕組みのどういったページを対象としているのかもわからなければ、xpathの中身がどういったものかもわからない状態で、こちらで推測で仮定した上で「この場合にはこの様に書きます」と回答したものであり、それで動作するといったものではありません。 また、エラーコードを見た所今回質問されている内容や私の差し上げた回答とは違う箇所でのエラーの様で別の問題です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問