【发布时间】:2021-07-23 00:38:12
【问题描述】:
我正在循环浏览一列 excel 文件,以便为我自动完成表单并提交。然而,挑战在于:
- 我无法将 excel 列中的值输入到表单的第一个字段中。
- 表单的 div 元素在发送值之前给了我不可点击的元素。 在此处查看表单的外观:
当您在选项出现之前手动开始输入名称时,第一个字段(艺术家)会自动打开值。
我的 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