如何使用Python简单地找到包含text / id / etc的链接然后单击该元素?
我的进口商品:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
转到我的网址的代码:
browser = webdriver.Firefox() # Get local session of firefox
browser.get(myURL) # Load page
#right here I want to look for element containing "Click Me" in the text
#and then click it
答案 0 :(得分:8)
查看WebDriver
类的方法列表 - http://selenium.googlecode.com/svn/trunk/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html
例如,要按ID查找元素并单击它,代码将如下所示
element = browser.find_element_by_id("your_element_id")
element.click()
答案 1 :(得分:3)
表示包含文字的链接
browser = webdriver.firefox()
browser.find_element_by_link_text(link_text).click()
答案 2 :(得分:3)
您只需使用此代码
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Firefox()
driver.get("https://play.spotify.com/")# here change your link
wait=WebDriverWait(driver,250)
# it will wait for 250 seconds an element to come into view, you can change the #value
submit=wait.until(EC.presence_of_element_located((By.LINK_TEXT, 'Click Me')))
submit.click()
这里等待最适合启用javascript的网站让我们假设如果你在webdriver中加载页面但是由于javascript某些元素在一些秒后加载然后它最好在那里使用wait元素。
答案 3 :(得分:3)
您好,有几种方法可以找到链接(或任何元素):
element = driver.find_element_by_id("element-id")
element = driver.find_element_by_name("element-name")
element = driver.find_element_by_xpath("//input[@id='element-id']")
element = driver.find_element_by_link_text("link-text")
element = driver.find_element_by_class_name("class-name")
我认为最好的选择是find_element_by_link_text
,因为它是一个链接。
将元素保存在变量中后,您可以调用点击函数:element.click()
或element.send_keys(Keys.RETURN)
看看selenium-python documentation,那里有几个例子。
答案 4 :(得分:2)
尝试SST - 这是一个简单但非常好的python测试框架。 首先安装它:http://testutils.org/sst/index.html
然后:
进口:
from sst.actions import *
首先定义一个变量 - element
- 您之后
element = assert_element(text="some words and more words")
我用过这个:http://testutils.org/sst/actions.html#assert-element
然后点击该元素:
click_element('element')
就是这样。
答案 5 :(得分:2)
您也可以通过xpath执行此操作:
Browser.find_element_by_xpath("//a[@href='you_link']").click()
答案 6 :(得分:2)
按链接文字查找元素
def on_model_change(self,form,model,is_created=False):
#...do some stuff...
history = history_records() # .get_create_form()
history.table = model_name
history.field_name = field_name
history.old_value = old_value
history.new_value = new_value
self.session.add(history)
按名称查找元素
driver.find_element_by_link_text("")
按ID查找元素
driver.find_element_by_name("")
答案 7 :(得分:2)
首先启动一个浏览器实例。然后,您可以使用以下任何方法来获取元素或链接。找到元素后,您可以使用angular.module('fakeApp').directive('vrFormatPhone', ['$compile',function($compile) {
return {
require: ['ngModel', '^form'],
restrict: 'A',
link: function(scope, elem, attrs, ctrl) {
var lastVal = "";
scope.inputCtrl = ctrl[0];
scope.form = ctrl[1];
var name = attrs['name'];
var errorSpan = angular.element('<span ng-show="form[\''+ name + '\'].$touched && form[\''+ name + '\'].$error.minlength" class="text-danger">This field must be at least 10 characters</span>');
elem.after(errorSpan);
$compile(errorSpan)(scope);
scope.$watch(attrs.ngModel, function (v) {
scope.format();
});
scope.format = function(){
var origVal = elem.val().replace(/[^\w]/gi, ''); // Remove all dashes, periods, spaces, etc
origVal = origVal.replace(/[ ]?x[ ]?/gi, ''); // Remove x for extension
if(origVal == lastVal){
return;
}
var phone = "";
var ext = "";
if(origVal.length >= 10) {
var str = origVal.substr(0,10);
ext = origVal.substr(10, 5); // Limit extension to 5 digits
str = str.replace(/(.{3})/g,"$1-"); // Add a dash every 4 digits...
phone = str.slice(0, -2) + str.slice(-1); // ...but remove the last dash so it's not 614-306-558-5
if(ext.length > 0){
phone += ' x ' + ext;
}
scope.inputCtrl.$setViewValue(phone); // Set the view value
scope.inputCtrl.$render();
}else{
scope.inputCtrl.$setValidity('minlength', false);
}
lastVal = origVal;
};
// Use $parsers to format the value from view to model
scope.inputCtrl.$parsers.push(function(value) {
value = value.replace(/-/g,'');
value = value.replace(/\./g,'');
value = value.replace(/ /g,'');
value = value.replace(/ /g,'');
return value;
});
}
};
}
]);
或element.click()
或element.send_keys(Keys.RETURN)
selenium webdriver
Selenium提供了以下方法来定位页面中的元素:
查找单个元素。这些方法将返回单个元素。
browser = webdriver.Firefox()
要查找多个元素(这些方法将返回一个列表)。稍后您可以遍历列表或使用browser.find_element_by_id(id)
browser.find_element_by_name(name)
browser.find_element_by_xpath(xpath)
browser.find_element_by_link_text(link_text)
browser.find_element_by_partial_link_text(partial_link_text)
browser.find_element_by_tag_name(tag_name)
browser.find_element_by_class_name(class_name)
browser.find_element_by_css_selector(css_selector)
,您可以从列表中找到单个元素。
elementlist[n]
答案 8 :(得分:1)
browser.find_element_by_xpath("")
browser.find_element_by_id("")
browser.find_element_by_name("")
browser.find_element_by_class_name("")
在(“”)内你必须放置相应的xpath,id,name,class_name等...