如何通过selenium和python

时间:2018-05-03 07:37:53

标签: python selenium selenium-webdriver xpath css-selectors

<div class="block-inner">
    <div class="form-group">
        <label>Username</label>
        <input type="text" name="username" class="required form-control" value="" placeholder="Enter your username...">
    </div>
    <div class="form-group w_margin">
        <label>Password</label>
        <input name="password" type="password" class="required form-control" style="" placeholder="Enter your password...">
    </div>
</div>

上下文

我的需要是在网页中找到用户名并自动移动到下一个元素来填充值,一旦找到密码文本并且必须移动到下一个元素以填充字典中的密码。请帮帮我。

driver = webdriver.Chrome()
driver.get("https://account.genndi.com/login")
element = "//label[contains(text(),'')]" #xpath

dictCredentials = {'Username':'abcdef', 'Password':'123'}
for clas in driver.find_elements_by_xpath(element):
    text = clas.text
    if text in dictCredentials.keys():
        inputbox = #please help here get corresponding input element
        inputbox.send_keys(dictCredentials[text])

我知道如何将密钥直接发送到文本框中,这也很容易。但我希望了解如何使用另一个类元素间接执行相同的操作。

4 个答案:

答案 0 :(得分:0)

为了达到这个目的,让我解释一下你将如何做到这一点。

首先,您需要获取Username元素。 你已经完成了这个:

element = driver.findElement(by.xpath("//label[contains(text(),'')]"));

您还可以做的是,直接获取父元素:

element = driver.findElement(by.xpath("//label[contains(text(),'Username')]/.."));

使用/..,您将获得带有文字label的元素Username的祖先

现在您已找到输入所在的元素,您可以说:

inputElement = element.findElement(by.xpath("./input"));

这样,在您找到的父元素中,您将查找输入字段。

答案 1 :(得分:0)

根据 HTML ,您已共享以查找<label>标记,文字为用户名密码,然后移至要填充值的下一个元素,您可以创建一个函数,该函数将<label>标记文本和text-to-send作为两个参数接受,并填写下一个<input>,如下所示:

def fillUp(labelText, inputValue):
    driver.find_element_by_xpath("//label[.='" + labelText + "']//following::input[1]").send_keys(inputValue)

现在,您可以在脚本中的任何位置调用此函数,如下所示:

fillUp("Username", "Chandrasekar ")
fillUp("Password", "Subramanian")

答案 2 :(得分:0)

只需使用“by_name”locator =)

user = {"name": "Alex", "password": 'pass'}
driver.find_element_by_name("username").send_keys(user.name)
driver.find_element_by_name("password").send_keys(user.password)

如果你真的想在父元素中找到“用户名”文本 - 你几乎没有其他选择:

首先是找到包含特定文本的包装元素,并在其中搜索输入:

self.driver.find_element_by_xpath("//*[label[text()='Username']]/input").send_keys("name")
self.driver.find_element_by_xpath("//*[label[text()='Password']]/input").send_keys("pass")

或者搜索元素的兄弟输入:

self.driver.find_element_by_xpath("//label[text()='Username']/following-sibling::input[1]").send_keys("pass")
self.driver.find_element_by_xpath("//label[text()='Password']/following-sibling::input[1]").send_keys("pass")

答案 3 :(得分:-1)

您可以使用此伪xpath获取它:

//*[@name='username']

然后:

  //*[@name='password']

&#34;移动&#34;,您可以按照以下模式使用您的代码实现:

  • 点击输入字段
  • 明确提交
  • 输入文字
  • 转到下一个元素
  • 明确提交
  • 输入文字