【问题标题】:Automating Web form Filling using Selenium, Python with Excel使用 Selenium、Python 和 Excel 自动化 Web 表单填充
【发布时间】:2021-07-23 00:38:12
【问题描述】:

我正在循环浏览一列 excel 文件,以便为我自动完成表单并提交。然而,挑战在于:

  • 我无法将 excel 列中的值输入到表单的第一个字段中。

  • 表单的 div 元素在发送值之前给了我不可点击的元素。 在此处查看表单的外观:

Img1:

图片2:

当您在选项出现之前手动开始输入名称时,第一个字段(艺术家)会自动打开值。

我的 Python 脚本如下:

from selenium import webdriver
import pandas as pd
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

#Read Data file
df = pd.read_excel('try.xlsx')

#Import Driver components
driver = driver = webdriver.Chrome('/home/dev-mike/.wdm/drivers/chromedriver/linux64/88.0.4324.96/chromedriver')
url = 'myurl'
username = 'myname.com'
password = '****'

driver.get(url)
time.sleep(2)
driver.find_element_by_id("email").send_keys(username)
time.sleep(1)
driver.find_element_by_id("password").send_keys(password)
time.sleep(1)
driver.find_element_by_xpath("//*[@id='app']/main/div/div/div/div/div[2]/form/div[4]/div/button").click()
time.sleep(1)
driver.find_element_by_xpath("/html/body/div/div[1]/div[3]/div[1]/div[2]/div[2]/button").click()

# #Inside Dashboard
for i in df.index:
    entry = df.loc[i]

    #Name Field
    driver.find_element_by_xpath('/html/body/div/div[2]/aside[1]/div/div[2]/div/form/div[1]/div/div/div/div[2]/span').click()
    time.sleep(10)
    artist_input = driver.find_element_by_xpath('/html/body/div/div[2]/aside[1]/div/div[2]/div/form/div[1]/div/div/div/div[3]/ul/li[1]/span/span')
    artist_input.send_keys(entry['Artist'])
    time.sleep(1)

    title_input = driver.find_element_by_id('input-2')
    title_input.send_keys(entry['Title'])
    time.sleep(1)

    medium_input = driver.find_element_by_id('input-3')
    medium_input.send_keys(entry['Medium'])
    time.sleep(1)

我的表单域元素的横截面如下所示: 这是基于在该输入字段中输入 Paul 的假设。

<div class="fb-select fb-element">
  <div class="v-popover display-block">
    <div
      aria-describedby="popover_qmz2wjbcfu"
      class="trigger"
      style="display: inline-block"
    >
      <span class="fb-select__label">Artist</span>
      <div tabindex="-1" class="multiselect fb-select__field">
        <div class="multiselect__select"></div>
        <div class="multiselect__tags">
          <div class="multiselect__tags-wrap" style="display: none"></div>
          <!---->
          <div class="multiselect__spinner" style="display: none"></div>
          <input
            name=""
            type="text"
            autocomplete="nope"
            placeholder="Start typing..."
            tabindex="0"
            class="multiselect__input is-focusable"
            style="width: 0px; position: absolute; padding: 0px"
          />
          <!---->
          <span class="multiselect__placeholder"> Start typing... </span>
        </div>
        <div
          tabindex="-1"
          class="multiselect__content-wrapper"
          style="max-height: 300px; display: none"
        >
          <ul class="multiselect__content" style="display: inline-block">
            <!---->
            <li class="multiselect__element">
              <span
                data-select=""
                data-selected=""
                data-deselect=""
                class="multiselect__option"
                ><span>Paul Gauguin</span></span
              >
              <!---->
            </li>
            <li class="multiselect__element">
              <span
                data-select=""
                data-selected=""
                data-deselect=""
                class="multiselect__option"
                ><span>Paul Kaspa</span></span
              >
              <!---->
            </li>
            <li class="multiselect__element">
              <span
                data-select=""
                data-selected=""
                data-deselect=""
                class="multiselect__option multiselect__option--highlight"
                ><span>Paula Rego</span></span
              >
              <!---->
            </li>
            <li style="display: none">
              <span class="multiselect__option"
                >No elements found. Consider changing the search query.</span
              >
            </li>
            <li style="display: none">
              <span class="multiselect__option">Nothing found</span>
            </li>
          </ul>
        </div>
      </div>
      <!---->
    </div>
  </div>
</div>

如果这个解释不清楚,我愿意让你进一步理解?

【问题讨论】:

  • @NatRiddle 你能再看看吗?我添加了代码 sn-p

标签: python excel selenium browser-automation


【解决方案1】:

使用:

driver.find_element_by_xpath(f"//div[@role='option'][normalize-space(.)='{your_input_text}']").click()

如果它不起作用,请说出它是什么网站,我会为你检查什么。

【讨论】:

  • 虽然没有成功。但是我怎样才能联系到你。
  • 你可以给我发邮件,这里是 m.safarzadeh1999@gmail.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
相关资源
最近更新 更多