Python 3.x 如何从BeautifulSoup scrape中提取onclick事件Javascript文本,然后与Selenium execute_脚本一起使用?

Python 3.x 如何从BeautifulSoup scrape中提取onclick事件Javascript文本,然后与Selenium execute_脚本一起使用?,python-3.x,selenium,beautifulsoup,selenium-chromedriver,Python 3.x,Selenium,Beautifulsoup,Selenium Chromedriver,我正在与一家内部网站合作,并使用Selenium和Beautifulsoup为多名员工提取工资存根。我首先使用Selenium打开站点,运行一个快速javascript生成一个结果表,然后使用BeautifulSoup根据支付金额查找我需要查看的特定存根 生成的表包含每个工资存根的链接,其中包含一个“onclick”事件,该事件生成一个javascript命令列表。没有其他方法可以识别每个工资存根的超链接,因此我专注于查找需要运行的onclick javascript以找到正确的工资存根 总之,

我正在与一家内部网站合作,并使用Selenium和Beautifulsoup为多名员工提取工资存根。我首先使用Selenium打开站点,运行一个快速javascript生成一个结果表,然后使用BeautifulSoup根据支付金额查找我需要查看的特定存根

生成的表包含每个工资存根的链接,其中包含一个“onclick”事件,该事件生成一个javascript命令列表。没有其他方法可以识别每个工资存根的超链接,因此我专注于查找需要运行的onclick javascript以找到正确的工资存根

总之,我只需要从下面的payref变量中提取13个不同的jv命令,我使用BeautifulSoup检索这些命令。然后,我可以使用Selenium使用execute_脚本运行该脚本。但是,我似乎无法从payhref中逻辑地提取该文本。

empid = 000000000
conum= 01
driver.get('http://www.website.com/hrs/payroll/checks/pay_summary.asp')
javascript = "document.querySelector('#txtFromDate').value = '12/1/2019';  document.querySelector('#spanFormletContentsFormletInput > table > tbody > tr > td > table > tbody > tr.alignTextCenter > td.alignTextCenter > input').click();" % (conum, empid)
driver.execute_script(javascript)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
paylink= soup.find(string="541.80")
paylink_parent = paylinks.find_parent("tr")
payhref = paylink_parent.find('a')
payhref然后返回此HTML:

<a href="/" onclick="document.frmInitial.hidSSN.value='000000000';
                                    document.frmInitial.hidCompany.value='01';
                                    document.frmInitial.hidUSERID.value='XXXXXXX';
                                    document.frmInitial.hidInsertID.value='XXXXXX';
                                    document.frmInitial.hidPeriodEndDate.value='2019-08-17';
                                    document.frmInitial.hidICC.value='4090';
                                    document.frmInitial.hidStation.value='132';
                                    document.frmInitial.hidDraftNumber.value='00004806';
                                    document.frmInitial.hidManualType.value='H';
                                    document.frmInitial.hidRate.value='.0000';
                                    document.frmInitial.hidReportingDate.value='2019-08-20';
                                    document.frmInitial.hidActionCode.value='2';
                                    document.frmInitial.hidReturnCode.value='0';
                                    this.href='javascript:submitForm(2)'">
                                    132</a>
更新的解决方案

onclicktext = payhref.get('onclick')
onclicktext返回:

"document.frmInitial.hidSSN.value='000000000';\n    \t\t\t\t\t\t        document.frmInitial.hidCompany.value='01';\n    \t\t\t\t\t\t        document.frmInitial.hidUSERID.value='XXXXXXX';\n    \t\t\t\t\t\t        document.frmInitial.hidInsertID.value='XXXXXXX';\n    \t\t\t\t\t\t        document.frmInitial.hidPeriodEndDate.value='2019-08-17';\n    \t\t\t\t\t\t        document.frmInitial.hidICC.value='4090';\n    \t\t\t\t\t\t        document.frmInitial.hidStation.value='132';\n    \t\t\t\t\t\t        document.frmInitial.hidDraftNumber.value='00004806';\n    \t\t\t\t\t\t        document.frmInitial.hidManualType.value='H';\n    \t\t\t\t\t\t        document.frmInitial.hidRate.value='.0000';\n    \t\t\t\t\t\t        document.frmInitial.hidReportingDate.value='2019-08-20';\n    \t\t\t\t\t\t        document.frmInitial.hidActionCode.value='2';\n    \t\t\t\t\t\t        document.frmInitial.hidReturnCode.value='0';\n    \t\t\t                    this.href='javascript:submitForm(2)'"
然后我重新格式化了onclicktext,使其可以通过Selenium的execute_脚本执行:

onclicktext = onclicktext.replace('\n','')
onclicktext = onclicktext.replace('\t','')
onclicktext = onclicktext.replace("this.href='javascript:submitForm(2)'",'')
driver.execute_script(onclicktext)
driver.execute_script('submitForm(2)')

我确信有一种更具python风格的方法可以做到这一点,但使用.get('onclick')肯定是我所缺少的。

一旦获得链接,只需使用属性值
onclick
,然后拆分排除最后一项即可

payhref = paylink_parent.find('a')
for item in payhref['onclick'].split(';')[:-1]:
    print(item.strip() +";")

获得链接后,只需使用属性值
onclick
,然后splitexclude最后一项

payhref = paylink_parent.find('a')
for item in payhref['onclick'].split(';')[:-1]:
    print(item.strip() +";")

要访问HTML标记中的元素,可以使用bs4中的.get()方法

onclicktext = payhref.get('onclick')

此变量将包含“onclick”元素中的所有内容。

要访问HTML标记中的元素,可以使用bs4中的.get()方法

onclicktext = payhref.get('onclick')

此变量将包含“onclick”元素中的所有内容。

尝试以下操作:
onclicktext=payref.get('onclick')
,这非常有用。现在我可以用replace删除\n和\t
onclicktext=onclicktext.replace('\n','')
只是把它作为一个答案发布了出来试试这个:
onclicktext=payref.get('onclick')
非常有用。现在我可以用replace删除\n和\t
onclicktext=onclicktext.replace('\n','')
只是把它作为一个答案发布了出来这也很有帮助,但除非我错了,否则我需要“;”保留在javascript文本中,以便将其传递给Selenium的execute_脚本函数同样,这也非常有用,但是除非我不正确,否则我需要“;”保留在javascript文本中,以便将其传递给Selenium的execute_脚本函数以及