使用 Selenium 获取 JavaScript 函数调用值
Get JavaScript function call value using Selenium
我正在使用 python-scrapy 抓取网页,它对静态内容非常有效。我试图从 this 页面抓取 url,但事实证明,它是通过 javascript 调用返回的。为此,我正在使用硒,但无法弄清楚该怎么做。
如果您单击给定 link 上的 "size chart",您会看到一个弹出窗口,其中提到了尺码指南。如何在我的程序中获取本指南的url?
我在 koovs 上也遇到了类似的问题,同时也在获取尺码指南。如果有人可以指导 link 中的任何一个,我将不胜感激。
通过link文本找到"size chart" link,点击它并提取数据,例如:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get('http://www.jabong.com/athena-Red-Black-Top-476472.html?pos=3')
wait = WebDriverWait(driver, 10)
chart = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "size chart")))
chart.click()
for title in driver.find_elements_by_css_selector("div.size-chart-body div.size-chart table th"):
print title.text
driver.close()
打印(table header 行,举个例子):
Indian Size
Euro Size
Garment Bust (In.)
Garment Waist (in.)
Garment Hip (in.):
请注意,您不需要 selenium 来获取尺寸图表数据,它已经在 DOM 中,但在您单击 "size chart" 之前是不可见的。你可以用 Scrapy 达到相同大小的图表 table。来自 "Scrapy Shell" 的演示:
$ scrapy shell http://www.jabong.com/athena-Red-Black-Top-476472.html?pos=3
In [1]: for title in response.css("div.size-chart-body div.size-chart table th")[1:]:
print title.xpath("text()").extract()[0]
...:
Indian Size
Euro Size
Garment Bust (In.)
Garment Waist (in.)
Garment Hip (in.)
对于 Koovs,您仍然可以避免使用 selenium 并构建尺码表 URL 手动提取类别和交易名称,例如:
$ scrapy shell http://www.koovs.com/only-onlall-stripe-ls-shirt-59554.html?from=category-651
In [1]: category = response.xpath("//input[@id='master_category_name_id_ref']/@value").extract()[0]
In [2]: deal = response.xpath("//input[@id='deal_id']/@value").extract()[0]
In [3]: "http://www.koovs.com/koovs/sizechart/women/{category}/{deal}".format(category=category, deal=deal)
Out[3]: 'http://www.koovs.com/koovs/sizechart/women/Shirts--651--799--896/59554'
而且,如果您仍然想使用 selenium,请看这里:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get('http://www.koovs.com/only-onlall-stripe-ls-shirt-59554.html?from=category-651&skuid=236376')
wait = WebDriverWait(driver, 10)
chart = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[size_chart]")))
chart.click()
driver.switch_to.window(driver.window_handles[-1])
print driver.current_url
driver.close()
打印:
http://www.koovs.com/koovs/sizechart/women/Shirts--651--799--896/59554
我正在使用 python-scrapy 抓取网页,它对静态内容非常有效。我试图从 this 页面抓取 url,但事实证明,它是通过 javascript 调用返回的。为此,我正在使用硒,但无法弄清楚该怎么做。
如果您单击给定 link 上的 "size chart",您会看到一个弹出窗口,其中提到了尺码指南。如何在我的程序中获取本指南的url?
我在 koovs 上也遇到了类似的问题,同时也在获取尺码指南。如果有人可以指导 link 中的任何一个,我将不胜感激。
通过link文本找到"size chart" link,点击它并提取数据,例如:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get('http://www.jabong.com/athena-Red-Black-Top-476472.html?pos=3')
wait = WebDriverWait(driver, 10)
chart = wait.until(EC.presence_of_element_located((By.LINK_TEXT, "size chart")))
chart.click()
for title in driver.find_elements_by_css_selector("div.size-chart-body div.size-chart table th"):
print title.text
driver.close()
打印(table header 行,举个例子):
Indian Size
Euro Size
Garment Bust (In.)
Garment Waist (in.)
Garment Hip (in.):
请注意,您不需要 selenium 来获取尺寸图表数据,它已经在 DOM 中,但在您单击 "size chart" 之前是不可见的。你可以用 Scrapy 达到相同大小的图表 table。来自 "Scrapy Shell" 的演示:
$ scrapy shell http://www.jabong.com/athena-Red-Black-Top-476472.html?pos=3
In [1]: for title in response.css("div.size-chart-body div.size-chart table th")[1:]:
print title.xpath("text()").extract()[0]
...:
Indian Size
Euro Size
Garment Bust (In.)
Garment Waist (in.)
Garment Hip (in.)
对于 Koovs,您仍然可以避免使用 selenium 并构建尺码表 URL 手动提取类别和交易名称,例如:
$ scrapy shell http://www.koovs.com/only-onlall-stripe-ls-shirt-59554.html?from=category-651
In [1]: category = response.xpath("//input[@id='master_category_name_id_ref']/@value").extract()[0]
In [2]: deal = response.xpath("//input[@id='deal_id']/@value").extract()[0]
In [3]: "http://www.koovs.com/koovs/sizechart/women/{category}/{deal}".format(category=category, deal=deal)
Out[3]: 'http://www.koovs.com/koovs/sizechart/women/Shirts--651--799--896/59554'
而且,如果您仍然想使用 selenium,请看这里:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get('http://www.koovs.com/only-onlall-stripe-ls-shirt-59554.html?from=category-651&skuid=236376')
wait = WebDriverWait(driver, 10)
chart = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[size_chart]")))
chart.click()
driver.switch_to.window(driver.window_handles[-1])
print driver.current_url
driver.close()
打印:
http://www.koovs.com/koovs/sizechart/women/Shirts--651--799--896/59554