chrome是如何忽略javascript的?如何克服这一点



有些网站响应javascript指令,有些则不响应。Santanders网站允许javascript出现在首页,但一旦您尝试登录,情况就会发生变化。从python传入的以下内容将打印到控制台的首页,但不会打印到第二页。

driver.execute_script('console.log(" lll kkk cheaky breeki ");')

我仍然可以打开开发工具并键入

console.log(" lll kkk cheaky breeki ");

当我手动执行时,它仍然有效,但当python传入时,它就不起作用了。

我的完整脚本在下面

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import selenium.common.exceptions as s_ex
driver = webdriver.Chrome("chromedriver.exe")
driver.get("https://www.santander.co.uk/")
login_xp = '/html/body/div[3]/header/div[1]/div/nav/div/div[1]/div/div/nav/ul/li[2]/a';
time.sleep(1)
driver.execute_script('console.log(" i print fine  ");')
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,login_xp)))
log = driver.find_element_by_xpath(login_xp)
log.click();
time.sleep(2)
driver.execute_script('console.log(" lll kkk cheaky breeki ");')  ## how can i get this to print, why doesnt it now?
  1. 如何让这个页面接受js
  2. 为什么现在不接受js

我试过你的例子-看起来log.click()行让浏览器打开了一个新的选项卡。当这种情况发生时,你的driver仍然指向主页的原始选项卡。

此时运行driver.execute_script('console.log(" lll kkk cheaky breeki ");')将在原始选项卡中执行脚本,而不是在新选项卡中执行。

如果你想在登录页面上运行一个脚本,我建议直接使用,例如:

driver.get('https://retail.santander.co.uk/olb/app/logon/access/#/logon')

问题是log.click()打开了一个新选项卡。因此,您需要告诉驱动程序切换到该新选项卡,并从现在起执行该选项卡上的所有语句。您会发现,当前驱动程序也无法在新选项卡上找到任何元素,因为它仍在查看您的旧选项卡。

log.click()
driver.switch_to.window(driver.window_handles[-1])
driver.execute_script('console.log(" lll kkk cheaky breeki ");')

注意,选项卡切换是非常初级的,它只是转到最后一个选项卡

相关内容

最新更新