我有这个代码在一个网页我试图刮与硒:
<h4 class="category" id="sc_14295">...</h4>
<h4 class="category" id="sc_14292">...</h4>
<h4 class="category" id="sc_14291">...</h4>
<h4 class="category" id="sc_14299">...</h4>
我试图实现这样的方法(我在SO上找到的)来获得至少一个id:
String id = driver.findElement(By.xpath("//div[@class='category']")).getAttribute("id");
这样:
String id = driver.findElement(By.xpath("//h4[@class='category']")).getAttribute("id");
它不起作用。我假设我应该使用findElements()
,但不能使用getAttribute。如何提取所有id的列表?谢谢
要打印元素的id属性列表,您需要诱导WebDriver等待visibilityOfAllElementsLocatedBy()
,您可以使用Java8stream()
和map()
,您可以使用以下定位器策略:
>
css选择器
:
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("h4.category"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()));
xpath
:
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//h4[@class='category']"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()));
没有看到java
标记,但过程是相同的。
这将获得一个元素,您可以直接获取id:
driver.find_element_by_xpath("//h4[@class = 'category']").get_attribute("id")
这将获取多个元素,但必须循环它们才能获取每个元素的id:
driver.find_elements_by_xpath("//h4[@class = 'category']"):
实例
from selenium import webdriver
driver = webdriver.Chrome('C:\Program Files\ChromeDriver\chromedriver.exe')
html_content = """
<h4 class="category" id="sc_14295">...</h4>
<h4 class="category" id="sc_14292">...</h4>
<h4 class="category" id="sc_14291">...</h4>
<h4 class="category" id="sc_14299">...</h4>
"""
driver.get("data:text/html;charset=utf-8,{html_content}".format(html_content=html_content))
for element in driver.find_elements_by_xpath("//h4[@class = 'category']"):
print(element.get_attribute("id"))
driver.close()
输出
sc_14295
sc_14292
sc_14291
sc_14299
我有一个Excel工作表,其中一栏填充了专利号。我需要提取每个相应专利的标题,并将其放在专利号旁边的单元格中。因此,代码应执行以下操作: 访问espacenet.com并打开需要名称的专利号。 获取标题。 将其放在所需单元格的Excel工作表中。 这是一个完美适用于第一个专利号的代码,但在这之后会立即出现错误。错误显示:“运行时错误'-2147417848(80010108)': 自动化错误调用的
问题内容: 我正在用Java开发一个应用程序,该应用程序可以从不同的网页获取文本信息并将其汇总为一页。例如,假设我在不同的网页(例如印度教,印度时报,政治家等)上都有新闻。该应用程序应该从这些页面的每个页面中提取要点,并将它们整合为一条新闻。该应用程序基于Web内容挖掘的概念。作为该领域的初学者,我不知道从哪里开始我浏览了一些研究论文,这些论文将消除噪声作为构建此应用程序的第一步。 因此,如果给我
问题内容: 使用Java,如何从给定的网页中提取所有链接? 问题答案: 将Java文件下载为纯文本/ html格式,并通过Jsoup或 html clean传递,两者相似,甚至可以用于解析格式错误的html 4.0语法,然后可以使用流行的HTML DOM解析方法,例如getElementsByName(“ a”)或在jsoup中它甚至很酷,您只需使用 并找到所有链接,然后使用 取自http://j
问题内容: 你可以在模板方面知道当前用户是否已通过身份验证: 但是我没有找到获取经过身份验证的用户列表的方法。 问题答案: 与rz的答案一起,你可以查询未到期的会话模型,然后将会话数据转换为用户。一旦知道了,就可以将其转换为模板标记,该标记可以在任何给定页面上呈现列表。 (这都是未经测试的,但希望将接近工作)。 提取所有已登录的用户… 使用此功能,你可以制作一个简单的包含模板标签… 然后,你可以在
我是Spring安全的新手,我想用数据库验证用户。我已经用jdbc创建了一个登录页面和一个身份验证提供程序,它检查用户是否存在于数据库中。但是我的代码没有这样做的问题是,它允许所有用户登录!我的代码怎么了?谢谢你的帮助。 这是我的安全会议。xml:
我在调试身份验证问题时遇到了这个代码片段: 我在调试和摆弄用户凭证时注意到,如果第一个身份验证提供者(即< code > userdailsservice )无法对我的用户进行身份验证,那么就会远程调用我的LDAP服务器来尝试对我的用户进行身份验证。但是,如果第一个身份验证提供者成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供者。 我的问题是,列出这些身份验证提供者的工作方式是否使得如