如何从<;获取href;a>;标签,其中包含使用Python的JavaScript?

如何从<;获取href;a>;标签,其中包含使用Python的JavaScript?,javascript,python,selenium,web-scraping,Javascript,Python,Selenium,Web Scraping,我试图使用Python+Selenium从标记中获取href,但是href中包含“JavaScript”。因此,我无法获取目标URL 我正在使用python3.7.3,selenium 3.141.0 HTML: 我需要的是目标URLas: 但它给了我: javascript:GoPDF('FS2311') 我检查了弹出窗口中的PDF url,并了解了他们是如何生成url的 他们使用文件名(例如FS2065)生成PDF URL PDF的url如下所示, 对于此部分之前的所有PDF,它具有相同

我试图使用Python+Selenium从标记中获取
href
,但是
href
中包含
“JavaScript”
。因此,我无法获取目标URL

我正在使用
python3.7.3
selenium 3.141.0

HTML:

我需要的是目标
URL
as:

但它给了我:

javascript:GoPDF('FS2311')


我检查了弹出窗口中的PDF url,并了解了他们是如何生成url的

他们使用文件名(例如FS2065)生成PDF URL

PDF的url如下所示,

对于此部分之前的所有PDF,它具有相同的路径

https://www3.colonialfirststate.com.au/content/dam/prospects/
在这一部分之后,我们有一个使用fileID生成的路径

fs/2/0/fs2065.pdf?3
 | | |     |     ||
 | | |     |     ++--- Not needed (But you can keep if you want)
 | | |     |
 | | |     +---- File Name
 | | +---------- 4th character in the file name 
 | +------------ 3rd character in the file name 
 +-------------- First two characters in the file name 
我们可以将此作为一种解决方法来获取准确的url

url = "javascript:GoPDF('FS2311')" # javascript URL  

pdfFileId = url[18:-2].lower() # extracts the file name from the Javascript URL

pdfBaseUrl = "https://www3.colonialfirststate.com.au/content/dam/prospects/%s/%s/%s/%s.pdf?3"%(pdfFileId[:2],pdfFileId[2],pdfFileId[3],pdfFileId) 

print(pdfBaseUrl)
# prints https://www3.colonialfirststate.com.au/content/dam/prospects/fs/2/3/fs2311.pdf?3
看到它在行动

对做背景工作的人表示敬意

我建议使用标准图书馆的设施。URL不像第一次出现时那么简单,编写
urllib
的人都是URL标准方面的专家

由于您正在进行web抓取,因此在进一步的过程中,您可能需要将相同的过程应用于各种URL,包括具有不同域名的URL、多位数查询组件(
?1234
和一整套其他可能性)甚至片段(
?1234#example
等)被接受的答案在所有这些方面都会失败

下面的代码乍一看似乎更复杂,但将棘手(而且可能很脆弱)的URL内容委托给
urllib
。它还使用更健壮和灵活的方法来提取GoPDF文件ID和url的不变部分

从urllib.parse导入urlparse,urlunsparse
def build_pdf_url(model_url,js_href):
url=url解析(模型\ url)
pdf_fileid=get_fileid_from_js_href(js_href)
pdf\U路径=构建pdf\U路径(模型url、pdf\U文件ID)
返回urlunparse((url.scheme,url.netloc,pdf_path,url.params,
url.query,url.fragment)
def get_fileid_from_js_href(href):
“”“通过在单引号之间提取文本来提取文件ID”“”
return href.split(“”)[1]。lower()
def生成pdf路径(url、pdf文件ID):
前缀=pdf_文件ID[:2]
major\u version=pdf\u文件ID[2]
次要版本=pdf文件ID[3]
filename=pdf_fileid+'.pdf'
返回“/”.join([不变路径(url),前缀,主要版本,次要版本,文件名])
def不变路径(url,删除的组件=4):
"""
返回URL“path”中除去的所有组件
注意:路径组件由“/”分隔
"""
path_components=urlparse(url).path.split(“/”)
返回“/”.join(路径\u组件[:-删除的\u组件])
js_href=“javascript:GoPDF('FS1546')”
模型url=”https://www3.colonialfirststate.com.au/content/dam/prospects/fs/2/3/fs2311.pdf?3"
打印(build_pdf_url(model_url,js_href))
$python urlbuild.py
https://www3.colonialfirststate.com.au/content/dam/prospects/fs/1/5/fs1546.pdf?3

在代码中共享html。
fs/2/0/fs2065.pdf?3
 | | |     |     ||
 | | |     |     ++--- Not needed (But you can keep if you want)
 | | |     |
 | | |     +---- File Name
 | | +---------- 4th character in the file name 
 | +------------ 3rd character in the file name 
 +-------------- First two characters in the file name 
url = "javascript:GoPDF('FS2311')" # javascript URL  

pdfFileId = url[18:-2].lower() # extracts the file name from the Javascript URL

pdfBaseUrl = "https://www3.colonialfirststate.com.au/content/dam/prospects/%s/%s/%s/%s.pdf?3"%(pdfFileId[:2],pdfFileId[2],pdfFileId[3],pdfFileId) 

print(pdfBaseUrl)
# prints https://www3.colonialfirststate.com.au/content/dam/prospects/fs/2/3/fs2311.pdf?3