-2

我正在创建一个程序来帮助学生跟踪他们的分数,因为我需要在网上废弃存储我们所有成绩的网站。这个想法是自动化登录,然后会有一个单独的脚本来获取我需要的信息。我无法自动登录,因为没有输入字段和按钮 ID。我能找到的只是按钮的名称输入字段和类。

browser = webdriver.Chrome()
browser.get(("https://www.the-site.com/"))

usernameStr = "myUsername"
passwordStr = "myPassword"

username = browser.find_element("UserName")
username.send_keys(usernameStr)
password = browser.find_element("Password")
password.send_keys(passwordStr)
nextButton = browser.find_element("btn btn-default")
nextButton.click()

这是我得到的错误:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator

这是输入字段和按钮的 HTML:

 <form action="https://my.e-klase.lv?v=15" method="post" autocomplete="off">
            <div class="form-group relative">
                <input type="text" class="form-control" placeholder="Lietotājvārds"
                       autocomplete="off"
                       autocorrect="off"
                       autocapitalize="off"
                       spellcheck="false" name="UserName"
                       value="">
                <div class="dummy-placeholder">Lietotājvārds</div>
            </div>
            <div class="form-group relative">
                <input type="private" class="form-control upass"
                       placeholder="Parole"
                       autocomplete="off"
                       autocorrect="off"
                       autocapitalize="off"
                       name="Password">
                <div class="dummy-placeholder">Parole</div>
            </div>

            <button type="submit" class="btn btn-default">
                <span class="progress"></span>
                <span class="content">Pieslēgties</span>
            </button>

        </form>
4

2 回答 2

0

您可以根据元素的任何独特属性来定位元素。
它可以是 id、类名、名称和任何其他属性值。
为了给您更具体的答案,我们需要查看网页元素 HTML。
UPD
根据您的 HTML,您可以使用以下定位器:

browser = webdriver.Chrome()
browser.get(("https://www.the-site.com/"))

usernameStr = "myUsername"
passwordStr = "myPassword"
time.sleep(5)

username = browser.find_element_by_xpath("//input[@name='UserName']")
username.send_keys(usernameStr)
password = browser.find_element_by_xpath("//input[@name='Password']")
password.send_keys(passwordStr)
nextButton = browser.find_element_by_xpath("//button[@type='submit']")
nextButton.click()

这应该基本上可以工作,但是您应该使用 ExpectedConditions 显式等待以等待页面加载

于 2022-01-20T18:58:59.523 回答
0

查找元素()

find_element()查找给定By策略和 a的元素locator

您的代码缺少By策略和locator. 因此,您会看到错误:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator

这个用例

根据您共享的 html,要理想地填写UserNamePassword字段,您需要为element_to_be_clickable()诱导WebDriverWait并且您可以使用以下任一定位器策略

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get(("https://www.the-site.com/"))
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.NAME, "UserName"))).send_keys("myUsername")
browser.find_element(By.NAME, "Password").send_keys("myPassword")
browser.find_element(By.XPATH, "//button[@class='btn btn-default']//span[text()='Pieslēgties']").click()
于 2022-01-20T21:21:41.050 回答