在 Python 中使用 Selenium 执行 Javascript
Execute Javascript using Selenium in Python
我正在使用 selenium 加载一个页面,我想执行这个
<script>
var ep_start = $('#episode_page a.active').attr('ep_start');
var ep_end = $('#episode_page a.active').attr('ep_end');
var id = $("input#movie_id").val();
var default_ep = $("input#default_ep").val();
var alias = $("input#alias_anime").val();
loadListEpisode('#episode_page a.active',ep_start,ep_end,id,default_ep,alias);
</script>
我不知道如何在 python 中执行此操作,我尝试使用完整脚本
js = '''script'''
browser.execute_script(js)
或者只是用 loadListEpisode(...) 替换每一个,它并没有真正起作用。
该脚本出现在页面上,所以也许有一种方法可以直接调用它。
我尝试手动提取 ep_start、ep_end.. 然后执行此操作
source = BeautifulSoup(...)
var1 = source.find(...)
...
browser.execute_script("loadEpisodeList(var1,var2,...)")
它也没有用,我认为它没有将它们识别为变量
如果$
表示jQuery
,您首先必须按如下方式将其加载到浏览器中如果当前页面尚未加载它:
path_to_jquery_js = '/my_scripts/jquery.js' # for example
with open(path_to_jquery_js, 'r') as f:
jquery_js = r.read()
browser.execute_script(jquery_js)
如果您没有在本地存储 jQuery,那么您将不得不使用 PyPi
存储库中的 requests
模块之类的东西来获取它:
import requests
jquery_url = 'https://some_domain/jquery.js' # for example
r = requests.get(jquery_url)
jquery_js = r.text
browser.execute_script(jquery_js
那么你应该可以执行如下脚本:
script = """
var ep_start = $('#episode_page a.active').attr('ep_start');
var ep_end = $('#episode_page a.active').attr('ep_end');
var id = $("input#movie_id").val();
var default_ep = $("input#default_ep").val();
var alias = $("input#alias_anime").val();
loadListEpisode('#episode_page a.active',ep_start,ep_end,id,default_ep,alias);
"""
browser.execute_script(script)
只需确保 loadListEpisode
已被已加载的其他 JavaScript 定义。
出于显而易见的原因,我没有对此进行测试,但试一试——原则上它应该可以工作。让我知道进展如何(我相信你会的)。
您只需将脚本作为参数传递给 execute_script() 方法,如下所示:
driver.execute_script("""
var ep_start = $('#episode_page a.active').attr('ep_start');
var ep_end = $('#episode_page a.active').attr('ep_end');
var id = $("input#movie_id").val();
var default_ep = $("input#default_ep").val();
var alias = $("input#alias_anime").val();
loadListEpisode('#episode_page a.active',ep_start,ep_end,id,default_ep,alias);
""")
You can find a relevant discussion in How to extract and print the final numbers using Selenium ChromeDriver and MutationObserver
我正在使用 selenium 加载一个页面,我想执行这个
<script>
var ep_start = $('#episode_page a.active').attr('ep_start');
var ep_end = $('#episode_page a.active').attr('ep_end');
var id = $("input#movie_id").val();
var default_ep = $("input#default_ep").val();
var alias = $("input#alias_anime").val();
loadListEpisode('#episode_page a.active',ep_start,ep_end,id,default_ep,alias);
</script>
我不知道如何在 python 中执行此操作,我尝试使用完整脚本
js = '''script'''
browser.execute_script(js)
或者只是用 loadListEpisode(...) 替换每一个,它并没有真正起作用。 该脚本出现在页面上,所以也许有一种方法可以直接调用它。 我尝试手动提取 ep_start、ep_end.. 然后执行此操作
source = BeautifulSoup(...)
var1 = source.find(...)
...
browser.execute_script("loadEpisodeList(var1,var2,...)")
它也没有用,我认为它没有将它们识别为变量
如果$
表示jQuery
,您首先必须按如下方式将其加载到浏览器中如果当前页面尚未加载它:
path_to_jquery_js = '/my_scripts/jquery.js' # for example
with open(path_to_jquery_js, 'r') as f:
jquery_js = r.read()
browser.execute_script(jquery_js)
如果您没有在本地存储 jQuery,那么您将不得不使用 PyPi
存储库中的 requests
模块之类的东西来获取它:
import requests
jquery_url = 'https://some_domain/jquery.js' # for example
r = requests.get(jquery_url)
jquery_js = r.text
browser.execute_script(jquery_js
那么你应该可以执行如下脚本:
script = """
var ep_start = $('#episode_page a.active').attr('ep_start');
var ep_end = $('#episode_page a.active').attr('ep_end');
var id = $("input#movie_id").val();
var default_ep = $("input#default_ep").val();
var alias = $("input#alias_anime").val();
loadListEpisode('#episode_page a.active',ep_start,ep_end,id,default_ep,alias);
"""
browser.execute_script(script)
只需确保 loadListEpisode
已被已加载的其他 JavaScript 定义。
出于显而易见的原因,我没有对此进行测试,但试一试——原则上它应该可以工作。让我知道进展如何(我相信你会的)。
您只需将脚本作为参数传递给 execute_script() 方法,如下所示:
driver.execute_script("""
var ep_start = $('#episode_page a.active').attr('ep_start');
var ep_end = $('#episode_page a.active').attr('ep_end');
var id = $("input#movie_id").val();
var default_ep = $("input#default_ep").val();
var alias = $("input#alias_anime").val();
loadListEpisode('#episode_page a.active',ep_start,ep_end,id,default_ep,alias);
""")
You can find a relevant discussion in How to extract and print the final numbers using Selenium ChromeDriver and MutationObserver