如何使用Selenium和Chromedriver查找元素

时间:2018-12-28 02:15:40

标签: python selenium xpath css-selectors webdriverwait

我是Selenium的新手。我正在OSX上使用anaconda的Selenium 3.141。我的Chrome版本是71.0,Chromedriver版本是2.45。我的目标是使用Selenium在网页上单击带有“接受”的按钮。我可以使用可执行文件实例化webdriver对象,并使用该对象加载有问题的页面。然后,我等待20秒。这是下一个失败的地方。代码无法找到必须单击的元素。随附的是在各个级别和子级别与按钮关联的元素的两个图像,其中包含来自检查的突出显示的部分。我尝试了

之类的变体
accept_button = driver.find_element_by_class_name('flex-x.static.h- center.v-center.bt-button.filled')

accept_button = driver.find_element_by_class_name('Accept')

和其他一些都无济于事。请帮忙。

按钮框:

button frame

接受矩形:

accept rectangle

3 个答案:

答案 0 :(得分:0)

您看到accept_button = driver.find_element_by_css_selector('bt-button.Accept.ng-isolate-scope.focused') # or accept_button = driver.find_element_by_css_selector('bt-button.Accept') 了吗,可以将其用于使用CSS选择器进行选择

def validateemail(emailaddress):
    return requests.get(
        "https://api.mailgun.net/v3/address/validate",
        auth=("api", EMAILPUBLICVALIDATIONKEY ),
        params={'address': emailaddress}
    )

validation = validateemail(email)
validationtext = validation.json

答案 1 :(得分:0)

所需元素是Angular元素,因此要定位/单击,必须诱使 WebDriverWait 使元素可点击,并且您可以使用以下任一方法以下解决方案:

  • 使用CSS_SELECTOR

    accept_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "bt-button.Aceept.ng-isolate-scope[mutable-label='prelogin.translations.Accept']")))
    
  • 使用XPATH

    accept_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//bt-button[@class='Aceept ng-isolate-scope focused' and @mutable-label='prelogin.translations.Accept']")))
    
  • 注意:您必须添加以下导入:

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

答案 2 :(得分:0)

我建议您检查要与之交互的元素是否在iframe中。 要确定这一点,您可以:右键单击元素,如果找到“ This Frame”之类的选项,则为iframe;或者您也可以在页面源中搜索 iframe 标签以进行识别。

如果您发现元素是iframe的一部分,则可以参考此问题以寻求进一步的解决方案:Select iframe using Python + Selenium