2016-12-06 116 views
1

我尝试了几个代码片段,我发现没有为我完成这项工作。另外,我检查,发现元素我试图选择具有的ID,这样Python Selenium在动态网页上选择一个复选框

find_element_by_id

没有工作。我ahd也试过

find_element_by_xpath and find_elements_by_name

非他们工作。我希望能够选择在this website

我的代码看起来像这样一个复选框:

from selenium.webdriver.common.keys import Keys 

url = "the web page above" 

# Creates an instance driver object for chrome browser... 
driver = webdriver.Chrome() 

# Get the url 
driver.get(url) 
driver.maximize_window() 

# Find list elements by id and click/select on it.... 
driver.find_element_by_xpath(".//*[contains(text(), 'Osborne & Little')]").click() 
+0

我试过你的代码。 xpath会更好,如下所示:''//*[text()[contains(.,'Osborne&Little')]]''但是这会是一个列表,因为标题也包含文本,if它返回了每个元素。情况并非如此,那些无线电盒无法以某种方式到达。一个简单的''//输入[@ type ='radio']“'只返回5个元素,所以你必须找到另一种方法来达到它们... – monami

+0

我试过你的xpath,我仍然得到这个错误:ElementNotVisibleException :消息:元素不可见 (会话信息:铬= 54.0.2840.99) (驾驶员信息:chromedriver = 2.25.426923(0390b88869384d6eb0d5d09729679f934aab9eed),平台= Windows NT的6.1.7600 x86_64的) –

+0

哪一个?这是一个更好的结果,我只收回了标题。我不认为等待的建议会有所帮助,因为我也在等待尝试,这些放射性物体在数十秒后没有返回,但也许你应该试一试。 – monami

回答

0

您使用XPath错误。 转到铬 - >查阅─> CMD + F 你可以尝试把在XPath测试选择元素

这里给您一个例子

 <span class="tss-label tss-label--hierarchy ng-binding" ng-class="displayRow[instance.item.id] ? 'tss-hierarchy__selectedStateText' : ''" ng-bind="instance.item.alias" title="Node-1: Instance #1 - d07f2ec4-71f1-4ae0-81c6-955c86e14c6e">Node-1: Instance #1</span> 

可以通过

 xpath "//*[contains(@title,'Node-1: Instance #1')] 
+0

您可以输入完整的代码吗? –

0

选择根据this你需要找到所有你需要点击的元素并迭代它们直到完成,这个例子是用java的,但是是相同的原理

为您的特定问题,你可以做下一个,或者您可以使用XPath简化,但是这是一个会为您的具体问题

WebDriver driver = new FirefoxDriver(); 
    driver.get("http://www.osborneandlittle.com/products-and-collections/fabric"); 
if (driver.findElements(By.partialLinkText("Osborne & Little")).isEmpty()) { 
    new WebDriverWait(
      driver, TIME_TO_WAIT).until(
        ExpectedConditions.presenceOfElementLocated(
          By.name("brand"))); 
    List<WebElement> elements = driver.findElements(By.tagName("label")); 

    for (int i = 0; i < elements.size(); i++) { 
     String textInCurrentlabel = elements.get(i).getText(); 
     if (textInCurrentlabel.equals("Osborne & Little")) { 
     elements.get(i).click(); 
     break; 
     } 
    } 
    } 
+0

你可以用代码片段更好地输入解释吗? –

+0

嗨奥马尔,我只是编辑我的答案,希望它有帮助 – jam

0

工作,在我看来,从你的XPath指定的例子是错误的,但假设这是正确的,你的这是一个负载问题,因为你试图在加载之前搜索元素,试试这个,让我知道pls,无论如何,如果你给我更多的细节,如URL和你需要的元素,我会能够帮助您更多:

from selenium.webdriver.common.keys import Keys 
import time 

url = "the web page above" 

# Creates an instance driver object for chrome browser... 
driver = webdriver.Chrome() 

# Get the url 
driver.get(url) 
driver.maximize_window() 

# Find list elements by id and click/select on it.... 
#wait the item is loaded 
i=0 
while i<1: 
    try: 
     driver.find_element_by_xpath(".//*[contains(text(), 'Osborne & Little')]").click() 
     i=1 
    except: 
     time.sleep(1) 
     i=0 

确保您使用正确的x路径打开URL firefox并安装插件萤火虫和firepath

相关问题