Почему xpath в FireFox работает нормально, а в Python выдает ошибку ?


(Олег Стасів) #1

Проблема заключается в том, что Xpath запрос в FireFox-е работает нормально, а компилятор Python выдает ошибку (не нравится двойной underline "__").

Ссылка на страницу сайта

Использую: FireFox v. 28 с додатками Firebug, FirePath, Python32

Так выглядит запрос в FireFox-е:

Ошибку которую я получил:

Пример кода, который не работает

`python
import unittest
from selenium import webdriver

class TestPriceUa(unittest.TestCase):
driver = None

def setUp(self):
	self.driver = webdriver.Firefox()
	self.driver.implicitly_wait(60)

def test_filter(self):
	self.driver.get("http://yandex.ru")
	self.driver.find_element_by_id("tab-market").click()
	self.driver.find_element_by_css_selector(r'.l-categories a[href="/catalog.xml?hid=91491"]').click()
	self.driver.find_element_by_css_selector(r'.black').click()	
	self.driver.find_element_by_id("f2142558003-1").send_keys('20000')
	self.driver.find_element_by_css_selector('#f2142557926 span').click()
	self.driver.find_element_by_id("f2142557926-1").send_keys('3')
	self.driver.find_element_by_css_selector('#f1801946-1871375').click()
	self.driver.find_element_by_css_selector('#f1801946-1871447').click()
	self.driver.find_element_by_css_selector('#f1801946-1871499').click()
	self.driver.find_element_by_css_selector('#f1801946-1871151').click()
	self.driver.find_element_by_css_selector('#f1801946-11756910').click()
	self.driver.find_element_by_css_selector(r'.b-gurufilters_submit-button').click()
	#Verify that page include 10 elements
	self.assertEqual(len(self.driver.find_elements_by_class_name('b-offers__info')), 10)
	#Remember the first item in the list
	first = self.driver.find_element_by_xpath('.//*[@class='page__b-offers__guru'] /div[1]/@id')
	print(first)
	#self.driver.find_element_by_xpath("html/body/div[3]/table/tbody/tr[2]/td[2]/div/ul[2]/li[4]/a").click()
	#items = self.driver.find_elements_by_xpath("//a[@class='b-offers__name']")
	#for list in items:
		#print(list.text)


#def tearDown(self):
	#self.driver.close()

if name == "main" :
unittest.main()
`

И все же, как мне прописать этот xpath запрос, чтобы компилятор Python не выдал синтаксической ошибки?


(Олег Стасів) #2

проблема решилась заменив кавычки ' ' на " "

xpath('.//*[@class='page__b-offers__guru'] /div[1]/@id')

на

xpath('.//*[@class="page__b-offers__guru"] /div[1]/@id')

(Mykhailo Poliarush) #3

Да, надо не забывать, что кавычки и двойные кавычки интерпретируются по разному в разных ситуациях, вот несколько примеров:

s = "string with quote 'some string' "
print s
string with quote 'some string'

s = 'string with quote "some string"'
print s
string with quote "some string"

s = """string with quote "some string" 'some string' """
print s
string with quote "some string" 'some string'

и есть еще варианты с ескейп символами:

s = "string with quote \"some string\" 'some string' "
print s

s = 'string with quote "some string" \'some string\' '
print s

http://lessons2.ru/lesson/category/python/