我想知道本地库中是否有可用的项目。我可以在目录中看到这个带有绿色图标(可用)或红色图标(借出/不可用)。
首先我尝试了beautifullsoup,这是我试过的python代码:
try:
import urllib.request as urllib2
except ImportError:
import urllib2
from bs4 import BeautifulSoup
page = urllib2.urlopen("http://zoeken.mol.bibliotheek.be/?itemid=|library/marc/vlacc|9394694&undup=false")
soup = BeautifulSoup(page)
bal = soup.find(class_="avail-icon")
print(bal)
但是当firefox中的元素检查给出:
<span class="avail-icon">
<i class="circle-icon avail-icon-none"></i>
<span class="hidden-text"></span>
</span>
class =&#34; circle-icon avail-icon-none&#34;表示该项目可用(在网页上显示绿色图标), class =&#34; circle-icon avail-icon-loanedout&#34;表示项目已借出(在网页上显示红色图标)。
我得到了:
<span class="avail-icon">
<i class="circle-icon avail-icon-loading"></i>
<span class="hidden-text">Toon beschikbaarheid voor</span>
</span>
class =&#34; circle-icon avail-icon-loading&#34;意味着动态,我认为,经过一番搜索,我找到了Selenium。
我尝试了以下代码:
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://zoeken.mol.bibliotheek.be/?itemid=|library/marc/vlacc|9394694&undup=false")
html = driver.page_source
soup = BeautifulSoup(html)
bal = soup.find(class_="avail-icon")
print(bal)
可悲的是,这给了我:
<span class="avail-icon">
<i class="circle-icon avail-icon-unknown"></i>
<span class="hidden-text">Toon beschikbaarheid voor</span>
</span>
在Selenium抓住网页之前,我可能还没有等待,所以经过一些搜索后我将代码更改为:
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://zoeken.mol.bibliotheek.be/?itemid=|library/marc/vlacc|9394694&undup=false")
html = driver.page_source
soup = BeautifulSoup(html)
bal = soup.find(class_="avail-icon")
print(bal)
结果仍然相同,class =&#34; circle-icon avail-icon-unknown&#34;不是我正在寻找的东西,我现在已经没有想法了。有人可以给我一个暗示吗?
PS:也许是个主意,但我不知道怎么做: 在Firefox中,在元素检查器中,右窗格有一个名为rules(dutch:regels)的列。红色和绿色图标作为一个.png文件(icon-sprite.png)加载。选择红色/绿色图标以查看我的意思。background-position:-48px -16px;表示可用(绿色图标)
background-position:0px -32px;表示不可用(红色图标)
我可以以某种方式测试吗?
PS2:我是新手程序员(技能等级=低)。
答案 0 :(得分:0)
您可以完全使用硒来完成此操作:
final case class Validation(ql: Option[SqlDataSource])
final case class SqlDataSource(dfh: Option[DataFrameHolder])
final case class DataFrameHolder(sql: Option[String])
val expVal = Validation(
ql = Some(
SqlDataSource(
dfh = Some(
DataFrameHolder(
sql = Some("Hello, World!")
)
)
)
)
)
implicit class OptionOps[T](private val op: Option[T]) {
def toTry(ex: => Throwable): Try[T] = op match {
case Some(t) => Success(t)
case None => Failure(ex)
}
}
val ssql: Try[String] = for {
ql <- expVal.ql.toTry(new IllegalStateException("CompareDF: Missing sql container"))
dfh <- ql.dfh.toTry(new IllegalStateException("CompareDF: dfh missing sql"))
sql <- dfh.sql.toTry(new IllegalStateException("CompareDF: Missing sql"))
} yield sql