怎么促成客户做网站/软件制作
具体内容利用java+selenuium,对京东网站进行购物,包括流程:用户登入、查找商品、选定测评、加入购物车、下单,如下两图:
环境搭建:
1. 下载eclipse安装包并安装
2.下载基于java的selenium包:本次配置下载的包为:selenium-java-3.141.59.zip
下载地址:http://docs.seleniumhq.org/download/
3. eclipse中导入selenium包内的所有jar包:client-combined-3.141.59、client-combined-3.141.59-sources、以及lib下的所有包
具体步骤:
a.先创建一个项目-->右击-Build Path-Add library-->user library-点击User libraries
b.进入User libraries后,新建一个selenium的存储jar包,New-命名为selenium-->点击selenium-Add Externerl JARs..将selenium-java-3.141.59.zip解压后的所有jar包添加进来。
4. 利用chrome浏览器时,需要先下载chromedriver:
注意先查看安装的chrome浏览器版本,然后再下载对应的chromedriver
例如本地浏览器通过菜单栏-->帮助-->关于Google Chrome可以看到本地chrome版本 76.0.3809.132(正式版本)(32 位)
通过查阅 chromedriver与chrome版本映射表,得知需要下载chromedriver版本;
chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html
这里最好将chromedriver(chromedriver.exe)放在与chrome浏览器(chrome.exe)同一目录下这里放在:C:\Program Files\Google\Chrome\Application下了;并且将chromedriver的路径添加到系统环境变量Path下:环境变量配置在,计算机->属性->高级系统设置->环境变量内进行配置
代码:
package taobao;public class PurchaseInJD1 {public static void main(String []args){//加载驱动System.setProperty("webdriver.chrome.driver", "C:\\Users\\ASUS\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\chromedriver_win32\\chromedriver.exe");SeleniumChromeDriverJD1 scd = new SeleniumChromeDriverJD1();//开始scd.connect();//跳转链接到到京东页面scd.goUrl("https://www.jd.com/");//点击“登录”scd.clickLinkText("登录");//点击“账户登录”scd.clickLinkText("账户登录");//输入用户名和秘密、点击登入scd.loginToJD();//增加时间拖动滑块进行验证scd.delay(5);scd.chazhao();scd.clickXPath("//*[@id=\"search\"]/div/div[2]/button/i");//提交订单//scd.clickXPath("//button[@id='order-submit']");//切换到新打开的窗口scd.switchToWindowTitle("鲜花 - 商品搜索 - 京东");//选择品牌中的 插画System.out.print("1");scd.clickXPath("//*[@id=\"brand-437357\"]/a");//选择送礼对象中的 情侣scd.delay(2);scd.clickXPath("//*[@id=\"J_selector\"]/div[1]/div/div[2]/div[1]/ul/li[2]/a");//具体一种System.out.print("2");scd.clickXPath("//*[@id=\"J_goodsList\"]/ul/li[1]/div/div[4]/a/em");//切换到最后打开的窗口,即商品详情页scd.goLastPage(); //点击数量加一//*[@id="choose-btns"]/div/div/a[2]scd.clickXPath("//*[@id=\"choose-btns\"]/div/div/a[2]");//点击加入购物车scd.clickLinkText("加入购物车");//去购物车中结算scd.clickXPath("//a[@id='GotoShoppingCart']");//去结算scd.clickXPath("//a[contains(string(), '去结算')]");//关闭驱动// scd.disconnect();}
}
package taobao;import java.util.ArrayList;
import java.util.Set;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;public class SeleniumChromeDriverJD1 {private static WebDriver chromeDriver;private static WebDriverWait wait10Secs; //允许网站响应的时间public SeleniumChromeDriverJD1(){chromeDriver = null;wait10Secs=null;}//开始测试public void connect(){ChromeOptions chromeOptions= new ChromeOptions();chromeOptions.addArguments("--start-maximized"); //使得网页最大化chromeDriver = new ChromeDriver(chromeOptions);wait10Secs = new WebDriverWait(chromeDriver,10);//允许网站在10秒内响应}//关闭测试public void disconnect(){// close the test windowchromeDriver.close();chromeDriver.quit();}/**跳转到某网页,或者打开某个主页。* @param strURL URL形式的网址,主页,网页*/public void goUrl(String strURL){chromeDriver.get(strURL);}/*** @return 当前打开窗口的最后一个句柄*/private String getLastHandle(){//获取当前打开窗口的所有句柄Set<String> allhandles = chromeDriver.getWindowHandles();ArrayList<String> lst = new ArrayList<String>(allhandles);return lst.get(lst.size()-1);}/**进入打开窗口的最后一个。**/public void goLastPage(){String lastHandle = getLastHandle();chromeDriver.switchTo().window(lastHandle);}/** 依据网页的字符串信息,来点击。* @param strLinkText 字符串,网页上可点击的元素。*/public void clickLinkText(String strLinkText){By orgnLocation = By.linkText(strLinkText);// WebDriver的时间,10秒钟内,等待“登录”链接出现。wait10Secs.until(ExpectedConditions.visibilityOfElementLocated(orgnLocation));//链接出现后,点击它。WebElement elemOrgn = chromeDriver.findElement(orgnLocation);elemOrgn.click();delay(1);}//登录public void loginToJD(){By userLocation = By.xpath("//*[@id=\"loginname\"]");chromeDriver.findElement(userLocation).sendKeys("152#####851");delay(1);//By passwordLocation = By.xpath("//input[@id='nloginpwd']");chromeDriver.findElement(passwordLocation).sendKeys("#####");delay(1);By loginLocation = By.xpath("//a[@id='loginsubmit']");chromeDriver.findElement(loginLocation).click();}//查找public void chazhao() {*[@id="key"]By need = By.xpath("//*[@id=\"key\"]");chromeDriver.findElement(need).sendKeys("鲜花");}/** 依据XPath路径信息,来点击。* @param strXPath 字符串,XML的XPath查询。*/public void clickXPath(String strXPath){By orgnLocation = By.xpath(strXPath);// WebDriver的时间,10秒钟内,等待strXPath链接出现。wait10Secs.until(ExpectedConditions.visibilityOfElementLocated(orgnLocation));//strXPath链接出现后,点击它。WebElement elemOrgn = chromeDriver.findElement(orgnLocation);elemOrgn.click();delay(1);}//切换到title=strTitle的窗口public String switchToWindowTitle(String strTitle){String curHandle = null;//记录包含strTitle的窗口句柄。for(String winHandle : chromeDriver.getWindowHandles()){chromeDriver.switchTo().window(winHandle);if (chromeDriver.getTitle().contains(strTitle)){curHandle = winHandle;break;} //end of if...} //end of for...return curHandle;}//延时public void delay(int seconds){try {Thread.currentThread().sleep(seconds * 1000);//毫秒} catch(Exception e){ }}}
注意事项:
1.SeleniumChromeDriverJD1类里面的loginToJO函数中填写自己京东的电话和密码;
2.测试加入购物车后记得额外取消购物
3.如果登录过程在存在滑动验证,自行手动划过;
4.淘宝等其他购物网站可参考仿照写,Xpath不会写的推荐去看 XPath 教程 (w3school.com.cn)
5.chromediver的位置要修改为自己电脑上的位置