javascript - 在 selenium python 中执行脚本

标签 javascript python html selenium web-scraping

我正在尝试在 selenium 中执行此脚本。

<div class="vbseo_liked">
<a href="http://www.jamiiforums.com/member.php?u=8355" rel="nofollow">Nyaralego</a>
,
<a href="http://www.jamiiforums.com/member.php?u=8870" rel="nofollow">Sikonge</a>
,
<a href="http://www.jamiiforums.com/member.php?u=8979" rel="nofollow">Ab-Titchaz</a>
and
<a onclick="return vbseoui.others_click(this)" href="http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html#">11 others</a>
like this.
</div>

这是我执行它的代码。

browser.execute_script("document.getElement(By.xpath(\"//div[@class='vbseo_liked']/a[contains(@onclick, 'return vbseoui.others_click(this)')]\").click()")

它没有用。我做错了什么?

最佳答案

找到带有selenium的元素,传给execute_script()点击:

link = browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]')
browser.execute_script('arguments[0].click();', link)

因为我知道问题的背景,下面是你解决它的一系列事情:

  • 根据此处提供的解决方案,通过 javascript 单击“其他 11 个”链接:How to simulate a click with JavaScript?
  • 制作 custom expected condition等待元素文本不以“11 others like this”结尾。文本(这是您在 Expected conditions with selenium 遇到的问题的解决方案):

    class wait_for_text_not_to_end_with(object):
        def __init__(self, locator, text):
            self.locator = locator
            self.text = text
    
        def __call__(self, driver):
            try :
                element_text = EC._find_element(driver, self.locator).text.strip()
                return not element_text.endswith(self.text)
            except StaleElementReferenceException:
                return False
    

实现:

from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class wait_for_text_not_to_end_with(object):
    def __init__(self, locator, text):
        self.locator = locator
        self.text = text

    def __call__(self, driver):
        try :
            element_text = EC._find_element(driver, self.locator).text.strip()
            return not element_text.endswith(self.text)
        except StaleElementReferenceException:
            return False


browser = webdriver.PhantomJS()
browser.maximize_window()
browser.get("http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html")

username = browser.find_element_by_id("navbar_username")
password = browser.find_element_by_name("vb_login_password_hint")

username.send_keys("MarioP")
password.send_keys("codeswitching")

browser.find_element_by_class_name("loginbutton").click()

wait = WebDriverWait(browser, 30)
wait.until(EC.visibility_of_element_located((By.XPATH, '//h2[contains(., "Redirecting")]')))
wait.until(EC.title_contains('Kenyan & Tanzanian'))
wait.until(EC.visibility_of_element_located((By.ID, 'postlist')))

# click "11 others" link
link = browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]')
link.click()
browser.execute_script("""
function eventFire(el, etype){
  if (el.fireEvent) {
    el.fireEvent('on' + etype);
  } else {
    var evObj = document.createEvent('Events');
    evObj.initEvent(etype, true, false);
    el.dispatchEvent(evObj);
  }
}

eventFire(arguments[0], "click");
""", link)

# wait for the "div" not to end with "11 others link this."
wait.until(wait_for_text_not_to_end_with((By.CLASS_NAME, 'vbseo_liked'), "11 others like this."))

print 'success!!'
browser.close()

关于javascript - 在 selenium python 中执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29377730/

相关文章:

html - 绝对定位元素的百分比宽度

javascript - 我想要第二次弹出时输入值不被清除

python - 如何使用 zip 迭代 x 个列表

javascript - 在下拉列表中发布值并更新到 mysql

javascript - PCRE 中是否有 "negated alternation"或 "negated string classes"、 la "negated character classes"之类的东西?

javascript - 使用 Lodash 链接或函数式 JS 挑战的数据操作

python - 如何使表面(次表面)围绕矩形居中? (缩放 Sprite 碰撞箱/碰撞矩形)

python - 使用 CSS 选择器单击按钮

javascript - 不断检查 cookie 是否过期的最佳实践?

javascript - 无法遍历依赖图