def payment(browser: PhantomJS, item_name): logger.info('Payment : {}'.format(item_name)) WebDriverWait(driver=browser, timeout=10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '#btn-placeorder'))) browser.find_element_by_css_selector( '.method_payment_cod > div:nth-child(1) > label:nth-child(1) > div:nth-child(1) > ins:nth-child(2)').click() browser.find_element_by_css_selector('#btn-placeorder').click() screen_shot(browser, 'payment.png', item_name=item_name)
def is_logged_in(browser: PhantomJS): browser.get('https://tiki.vn/sales/order/history/') full_name = browser.find_element_by_css_selector('.profiles > h6:nth-child(3)') if full_name.text: logger.info("You has been login with name : {}".format(full_name.text)) return True else: return False
def on_start_again(self, url): driver = PhantomJS() driver.get(url) time.sleep(2) driver.maximize_window() t = driver.find_element_by_css_selector('.page-txt').text res_t = [] if t: t = int(t.split('/')[1][:-1]) - 1 # get the page count # the count of page turning should be i-1 while t: t -= 1 move_ele = driver.find_element_by_css_selector('#next') ActionChains(driver).move_to_element(move_ele).click() time.sleep(1) res_t.append(driver.page_source) driver.quit() for item in res_t: self.step_first(item)
def get_item(browser: PhantomJS, item: dict, check_inverter): price_expect = get_price(item['price']) max_retry = 5 retry = 0 while retry < max_retry: retry += 1 browser.get(item.get('url')) item_title = browser.find_element_by_css_selector('#product-name') item_name = item_title.text item_price = browser.find_element_by_css_selector('#span-price') logger.info("{} -> {}".format(item_price.text, item_name)) price_seller = get_price(item_price.text) screen_shot(browser=browser, file_name='buy.png', item_name=item_name) if price_seller <= price_expect: browser.find_element_by_css_selector('#\#mainAddToCart').click() return item_name else: logger.info("Retry : {}. {}".format(retry, item_title.text)) time.sleep(check_inverter)
def catalog_url(url='http://www.meitun.com/'): # catalog_url is AJAX,use phantomJS driver = PhantomJS() driver.get(url) driver.maximize_window() mov_ele = driver.find_element_by_css_selector('.nav>ul>li:nth-child(1)') # the mouse move to the lazy layout element,and perform ActionChains(driver).move_to_element(mov_ele).perform() time.sleep(3) response = driver.page_source driver.quit() # use pyquery parser the page source,more quickly d = pq(response) return map(lambda x: 'http:' + pq(x).attr('href'), d.find('.cg-pdts a'))
def onegoogolePR(self, url): '''返回单个PR''' prUrl = 'http://pr.chinaz.com' # 谷歌PR查询地址 driver = PhantomJS() driver.get(prUrl) driver.find_element_by_id('PRAddress').send_keys(url) driver.find_element_by_class_name('search-write-btn').click() try: imgsrc = driver.find_element_by_css_selector('span#pr>img').get_attribute('src') pr = search(r'\d', imgsrc).group() except: pr = '暂无数据' driver.quit() return pr
def check_out(browser: PhantomJS, item_name): logger.info('Checkout : {}'.format(item_name)) browser.get('https://tiki.vn/checkout/cart') screen_shot(browser, 'checkout.png', item_name=item_name) browser.find_element_by_css_selector('.btn-large').click()
def shipping(browser: PhantomJS, item_name): logger.info('Shipping : {}'.format(item_name)) WebDriverWait(driver=browser, timeout=10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.is-blue'))) screen_shot(browser, 'shipping.png', item_name=item_name) browser.find_element_by_css_selector('.is-blue').click() screen_shot(browser, 'shipping.png', item_name=item_name)
class Client(object): """Client HTTP pour tester fonctionnellement Strass Adapteur du pilote Selenium, avec une interface inspirée de Nightwatch.js, et quelques paramètres spécifiques à Strass.""" def __init__(self): self.driver = PhantomJS() self.driver.set_window_size(1120, 550) def __del__(self): self.driver.quit() def get(self, query=None): server = os.environ.get('STRASS_TEST_SERVER', 'http://localhost:8000') url = server + (query or '/') self.driver.get(url) return self def find(self, selector): return self.driver.find_element_by_css_selector(selector) def click(self, selector): self.find(selector).click() return self def fill(self, selector, value): if isinstance(value, datetime.date): self.fill(selector + ' input.day', str(value.day)) self.fill(selector + ' input.month', str(value.month)) self.fill(selector + ' input.year', str(value.year)) else: control = self.find(selector) try: control.clear() except selexc.InvalidElementStateException: # On doit tenter de nettoyer un input[type=file]. On zap. pass control.send_keys(value) return self def select(self, selector, value): Select(self.find(selector)).select_by_value(value) return self def submit(self, selector='#document button[type=submit]'): return self.click(selector) def close(self): self.driver.close() if self.driver.window_handles: self.driver.switch_to.window(self.driver.window_handles[0]) self.driver.set_window_size(1120, 550) return self def screenshot(self, filename): self.driver.get_screenshot_as_file(filename) sys.stderr.write("Capture d'écran enregistrée dans %r\n" % (filename,)) return self def save(self, filename): with open(filename, 'w') as fo: fo.write(self.driver.page_source) sys.stderr.write("HTML enregistré dans %r\n" % (filename,)) return self def __getattr__(self, name): return getattr(self.driver, name)
class ProviderAdvancedViewTests(LiveServerTestCase): def setUp(self): self.driver = PhantomJS() self.user = User.objects.create_user('admin', '*****@*****.**', 'password') self.user.save() self.provider = Provider( name='provider', user=self.user, ) self.provider.save() self.provider_adverts = mommy.make(Advertisement, _quantity=20, provider=self.provider) self.login() def tearDown(self): self.driver.quit() def open(self, url): self.driver.get("%s%s" % (self.live_server_url, url)) def login(self): self.open(settings.LOGIN_URL) self.driver.find_element_by_id("id_username").send_keys("admin") self.driver.find_element_by_id("id_password").send_keys("password") self.driver.find_element_by_css_selector("button.btn.btn-default").click() self.assertEqual( self.driver.current_url, self.live_server_url + reverse('advertisements.views.view_provider_statistics', args=[self.provider.pk]), ) def test_can_login(self): """ Test that the user can login """ pass def test_provider_page_has_all_data(self): """ Test that the provider statistics page has all the correct data """ self.open(reverse('advertisements.views.view_provider_statistics', args=[self.provider.pk])) self.assertEqual("Open Ads", self.driver.title) self.assertIn( "{0} advertisements".format(self.provider.name), self.driver.find_element_by_css_selector("h1.page-header").text ) self.assertIn( "{0} advertisements in rotation".format(20), self.driver.find_element_by_css_selector("h1.page-header").text ) def test_advertisement_page_has_all_data(self): """ Test that the advertisement page has all the correct data """ for advert in self.provider_adverts: self.open(reverse('advertisements.views.view_advert_statistics', args=[advert.pk])) self.assertIn( "ID number: {0}".format(advert.pk), self.driver.find_element_by_css_selector("h1.page-header").text, ) self.driver.find_element_by_css_selector("img") self.assertEqual("Active", self.driver.find_element_by_xpath("//td[2]/span").text) self.assertEqual(advert.url, self.driver.find_element_by_link_text(advert.url).text) self.driver.find_element_by_link_text("Edit URL").click() self.assertEqual(advert.url, self.driver.find_element_by_id("id_url").get_attribute("value"))
import time import json dr = PhantomJS() url = "https://www.v2ex.com/signin" u = 'username' p = 'password' dr.get(url) account = dr.find_element_by_name('u') account.clear() account.send_keys(u) password = dr.find_element_by_name('p') password.clear() password.send_keys(p) login_btn = dr.find_elements_by_css_selector('.super.normal.button')[1] login_btn.click() mission_daily_url = 'https://www.v2ex.com/mission/daily' dr.get(mission_daily_url) get_daily_award = dr.find_element_by_css_selector('.super.normal.button') get_daily_award.click() balance_url = 'https://www.v2ex.com/balance' dr.get(balance_url) intergal = dr.find_elements_by_css_selector('.positive')[0] yue = dr.find_elements_by_css_selector('.balance_area')[0] now = time.strftime("%y-%m-%d %H:%M:%S") item = {"Time": now, "get": intergal.text, "all": yue.text} with open('v2ex_sign.json', "a") as fp: fp.write(json.dumps(item)) dr.close()