kokku
@kokku

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

入力ボックスに文字列を入力したい

pythonでseleniumを使い、スクレイピングを試行錯誤しながら動かしてみるのですが、

<input id="order_billing_name" name="order[billing_name]" size="30" type="text">

この部分に文字列を入力したいのですが、エラー続きでなかなか進めません。

試したこと

driver.execute_script('document.getElementById("order_billing_name]").class="%s";' % "あああああ")
このようにしてコードを書いたのですがこのようなエラーが出てしまいます。

JavascriptException: Message: javascript error: Cannot set property 'class' of null
  (Session info: chrome=86.0.4240.183)

解決方法があれば教えていただきたいです

0

6Answer

driver.execute_script('document.getElementById("order_billing_name]").value="%s";' % "あああああ")
0Like

Comments

  1. @kokku

    Questioner

    JavascriptException: Message: javascript error: Cannot set property 'value' of null
    (Session info: chrome=86.0.4240.183)

    上記コマンドに修正してみたところ、このようなエラーが出てきてしまいました。
driver.execute_script('document.getElementById("order_billing_name").value="%s";' % "あああああ")
0Like

スクレイピングするサイトのhtml

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>kokku</title>
  </head>
  <body>
    <input
      id="order_billing_name"
      name="order[billing_name]"
      size="30"
      type="text"
    />
  </body>
</html>

Python環境

Dockerfile

FROM python:3-slim
# Chrome & Webdriver
RUN apt-get update -y && \
  apt-get install -y --no-install-recommends chromium && \
  pip install --upgrade pip setuptools wheel && \
  pip install selenium && \
  # webdriverはなるべく近いバージョンをダウンロード
  pip install chromedriver-binary~=$(chromium --version | perl -pe 's/([^0-9]+)([0-9]+\.[0-9]+).+/$2/g')

# 日本語環境
ENV LANGUAGE ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
RUN apt-get install -y --no-install-recommends locales && \
  locale-gen ja_JP.UTF-8 && \
  # 日本語フォントをインストール
  apt-get install -y --no-install-recommends fonts-ipafont
docker-compose.yml
version: '3'
services:

  selenium_python:
    build: .
    container_name: selenium_python
    working_dir: /home
    volumes:
      - ./file:/home
    tty: true
    restart: always
file/index.py
from selenium import webdriver
import chromedriver_binary

url = "https://yuzuru2.github.io/ko"

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1224,844")
driver = webdriver.Chrome(options=options)

driver.get(url)
print(driver.title)
driver.execute_script('document.getElementById("order_billing_name").value="%s";' % "あああああ")
driver.save_screenshot('test.png')

driver.quit()

コマンド

$ docker-compose up -d
$ docker exec -it selenium_python bash
$ python index.py
$ exit
$ docker-compose down -v

コマンドをたたくとfile/test.pngが生成されてスクレイピングの結果を見ることができる

0Like

Comments

index.py
from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 製品ページ (ここは適切に変える)
product_url = "https://www.supremenewyork.com/mobile/#products/6847"

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1224,844")
driver = webdriver.Chrome(options=options)

# 製品ページへ
driver.get(product_url)
WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)

# カートに入れる処理 (ここは適切に変える)
driver.find_elements_by_css_selector('.cart-button')[0].click()
time.sleep(5)

# 支払い画面へ (ここは適切に変える)
driver.find_elements_by_css_selector('#checkout-now')[0].click()
time.sleep(5)

driver.execute_script('document.getElementById("order_billing_name").value="%s";' % "あああああ")
driver.save_screenshot('test.png')

driver.quit()
0Like

以下のコードで実行してみてください。

driver.find_element_by_id('order_billing_name').send_keys('あああああ')
0Like

Your answer might help someone💌