<a class="a-link-normal a-text-normal"
href="/Cay-S.-Horstmann/e/B000AQ1QDY/ref=sr_ntt_srch_lnk_1?qid=1542117551&sr=8-1-spons">
Cay S. Horstmann
</a>
我的意思是可以从上面的标签中获取 Cay S. Horstmann 文本吗?
现在我正试图像这样:
link.findElement(By.cssSelector("a.a-link-normal.a-text-normal")).getText());
但是它只输出一个空字符串...
public class AmazonSearchResultsPage {
public AmazonSearchResultsPage(WebDriver driver) {
PageFactory.initElements(driver, this);
this.driver = driver;
}
public WebDriver driver;
@FindBy(css = "#s-results-list-atf")
public WebElement searchResults;
public void getBooksInfo () {
List<WebElement> links = searchResults.findElements(By.tagName("li"));
if (links.size() > 0) {
String title, author, price, rating, isBestSeller;
for (int i = 0; i < links.size(); i++) {
title = links.get(i).findElement(By.cssSelector("h2.a-size-medium.s-inline.s-access-title.a-text-normal")).getText();
author = links.get(i).findElement(By.cssSelector("a.a-link-normal.a-text-normal")).getText());
}
}
else System.out.println("Your search has no results");
}
}
根据评论更新
我正在尝试从amazon.com上的搜索书籍页面中获取书籍作者名称,例如,您可以使用搜索查询“ Java”amazon.com/s/…访问此链接,我试图从那里获取作者名称
答案 0 :(得分:1)
根据您的问题更新以检索书籍作者姓名,您需要诱使 WebDriverWait 使所需元素可见,并且可以使用以下两种解决方案之一:
cssSelector
:
List<WebElement> author_name_elements = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("ul#s-results-list-atf span.a-size-small.a-color-secondary>a.a-link-normal.a-text-normal")));
for (WebElement author_name:author_name_elements){
System.out.println(author_name.getText());
XPATH
:
List<WebElement> author_name_elements = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//ul[@id='s-results-list-atf']//span[contains(.,'by')]//following::span[1]/a[@class='a-link-normal a-text-normal']")));
for (WebElement author_name:author_name_elements){
System.out.println(author_name.getText());
答案 1 :(得分:0)
好吧,我可以从URL中提取信息。
@Test
public static void testMF(){
WebDriver driver;
System.setProperty("webdriver.gecko.driver","./src/drivers/geckodriver64bit.exe");
driver=new FirefoxDriver();
driver.get("https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=Java&rh=i%3Aaps%2Ck%3AJava");
List<WebElement> authorNames=driver.findElements(By.xpath("//a[contains(@href,'/Cay-S.-Horstmann/')]"));
for (WebElement author:authorNames){
System.out.println(author.getText());
}
}
这是作者姓名的控制台输出:
[RemoteTestNG] detected TestNG version 6.14.2
1542125453774 mozrunner::runner INFO Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\Dhamo\\AppData\\Local\\Temp\\rust_mozprofile.ZTVooPdHTxOZ"
1542125455373 Marionette INFO Listening on port 63531
1542125455395 Marionette WARN TLS certificate errors will be ignored for this session
Nov 13, 2018 10:10:55 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Cay S. Horstmann
Cay S. Horstmann
更新问题的代码:
public static void testMF() {
WebDriver driver;
System.setProperty("webdriver.gecko.driver", "./src/drivers/geckodriver64bit.exe");
driver = new FirefoxDriver();
driver.get(
"https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=Java&rh=i%3Aaps%2Ck%3AJava");
List<WebElement> searchResults = driver.findElements(By
.xpath("//div[@class='s-item-container'][1]/div/div/div[@class='a-fixed-left-grid-col a-col-right']"));
System.out.println(searchResults.size());
try {
if (searchResults.size() > 0) {
String title, author = null;
int i = 0;
for (WebElement el : searchResults) {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", el);
i++;
title = el.findElement(By.cssSelector("h2.a-size-medium.s-inline.s-access-title.a-text-normal"))
.getText();
System.out.println("Title:" + i + "-" + title);
if(el.findElements(By.cssSelector("div.a-row.a-spacing-small > div:nth-child(2)")).size()>0){
author = el.findElement(By.cssSelector("div.a-row.a-spacing-small > div:nth-child(2)")).getText();
}
System.out.println("Author:" + i + "-" + (author.isEmpty()?"Author Not Found":author));
}
} else
System.out.println("Your search has no results");
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
}